{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "RNN DNN岩性分类.ipynb",
      "provenance": [],
      "toc_visible": true,
      "authorship_tag": "ABX9TyOmccGQSsF1JfAzfZzA+5zw",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/sunyingjian/-Logging-related-network/blob/master/RNN_DNN%E5%B2%A9%E6%80%A7%E5%88%86%E7%B1%BB.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Cqy3vXXOMI06",
        "colab_type": "text"
      },
      "source": [
        "### <font size=5px color=\"red\">✦ *Google Colab 突破90分钟自动断开:</font>\n",
        "<p><font size=3px > 每60分钟自动运行代码以刷新90分钟断开限制. 打开 developer-settings (在你的浏览器) 快速健 Ctrl+Shift+I 然后按console 输入以下代码 Enter. ( mac 按 Option+Command+I)</p><b>复制以下隐藏代码粉贴在浏览器console！！不要关闭浏览器以免失效</b>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3Z8cK8h2Avbv",
        "colab_type": "text"
      },
      "source": [
        "<code>function ClickConnect(){\n",
        "console.log(\"Working\"); \n",
        "document.querySelector(\"colab-connect-button\").click() \n",
        "}setInterval(ClickConnect,6000)</code>"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jtClEMAMLVHw",
        "colab_type": "code",
        "cellView": "both",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "b7e88ccb-aeba-461f-b691-2f7a9b34be07"
      },
      "source": [
        "#@markdown <h3>← 输入了代码后运行以防止断开</h>\n",
        "\n",
        "\n",
        "import IPython\n",
        "from google.colab import output\n",
        "\n",
        "display(IPython.display.Javascript('''\n",
        " function ClickConnect(){\n",
        "   btn = document.querySelector(\"colab-connect-button\")\n",
        "   if (btn != null){\n",
        "     console.log(\"Click colab-connect-button\"); \n",
        "     btn.click() \n",
        "     }\n",
        "   \n",
        "   btn = document.getElementById('ok')\n",
        "   if (btn != null){\n",
        "     console.log(\"Click reconnect\"); \n",
        "     btn.click() \n",
        "     }\n",
        "  }\n",
        "  \n",
        "setInterval(ClickConnect,60000)\n",
        "'''))\n",
        "\n",
        "print(\"Done.\")"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "application/javascript": [
              "\n",
              " function ClickConnect(){\n",
              "   btn = document.querySelector(\"colab-connect-button\")\n",
              "   if (btn != null){\n",
              "     console.log(\"Click colab-connect-button\"); \n",
              "     btn.click() \n",
              "     }\n",
              "   \n",
              "   btn = document.getElementById('ok')\n",
              "   if (btn != null){\n",
              "     console.log(\"Click reconnect\"); \n",
              "     btn.click() \n",
              "     }\n",
              "  }\n",
              "  \n",
              "setInterval(ClickConnect,60000)\n"
            ],
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Done.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Yd3MQph-PpH2",
        "colab_type": "text"
      },
      "source": [
        "#引入数据"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fokPJgr0Pw8B",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 311
        },
        "outputId": "bb6b2a19-76cb-4c79-c39b-a153a9debcdc"
      },
      "source": [
        "! git clone https://github.com/seg/tutorials-2016.git\n",
        "! git clone https://github.com/sunyingjian/numpy-.git\n",
        "! git clone https://github.com/sunyingjian/Machine-Learning-From-Scratch.git"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Cloning into 'tutorials-2016'...\n",
            "remote: Enumerating objects: 161, done.\u001b[K\n",
            "remote: Total 161 (delta 0), reused 0 (delta 0), pack-reused 161\u001b[K\n",
            "Receiving objects: 100% (161/161), 16.86 MiB | 21.34 MiB/s, done.\n",
            "Resolving deltas: 100% (64/64), done.\n",
            "Cloning into 'numpy-'...\n",
            "remote: Enumerating objects: 17, done.\u001b[K\n",
            "remote: Counting objects: 100% (17/17), done.\u001b[K\n",
            "remote: Compressing objects: 100% (17/17), done.\u001b[K\n",
            "remote: Total 106 (delta 6), reused 0 (delta 0), pack-reused 89\u001b[K\n",
            "Receiving objects: 100% (106/106), 3.90 MiB | 15.97 MiB/s, done.\n",
            "Resolving deltas: 100% (39/39), done.\n",
            "Cloning into 'Machine-Learning-From-Scratch'...\n",
            "remote: Enumerating objects: 287, done.\u001b[K\n",
            "remote: Total 287 (delta 0), reused 0 (delta 0), pack-reused 287\u001b[K\n",
            "Receiving objects: 100% (287/287), 91.24 KiB | 1.82 MiB/s, done.\n",
            "Resolving deltas: 100% (133/133), done.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "b2t-kbnBP1Sb",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 124
        },
        "outputId": "a1512d29-d85b-4181-faa6-b62d69ebfc96"
      },
      "source": [
        "import os\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n",
            "\n",
            "Enter your authorization code:\n",
            "··········\n",
            "Mounted at /content/drive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4TrAKecRQBeX",
        "colab_type": "text"
      },
      "source": [
        "#数据处理"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gS4jV_1VP8vw",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 407
        },
        "outputId": "141dc5a9-617e-4108-d73c-c849fc3bff3a"
      },
      "source": [
        "%matplotlib inline\n",
        "#%matplotlib inline 可以在Ipython编译器里直接使用，功能是可以内嵌绘图，并且可以省略掉plt.show()这一步。\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib as mpl\n",
        "import matplotlib.pyplot as plt\n",
        "import matplotlib.colors as colors\n",
        "from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
        "from pandas import set_option\n",
        "set_option(\"display.max_rows\", 10)#设置要显示的默认行数，显示的最大行数是10\n",
        "pd.options.mode.chained_assignment = None #为了在增加列表行数的时候防止出现setting with copy warning\n",
        "training_data = pd.read_csv('/content/numpy-/3345train data.csv')\n",
        "training_data\n",
        "testing_data = pd.read_csv('/content/numpy-/3345test_data.csv')\n",
        "testing_data"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>AC</th>\n",
              "      <th>CAL</th>\n",
              "      <th>GR</th>\n",
              "      <th>K</th>\n",
              "      <th>RD</th>\n",
              "      <th>SP</th>\n",
              "      <th>Core Lithology</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.038756</td>\n",
              "      <td>0.026970</td>\n",
              "      <td>0.094776</td>\n",
              "      <td>0.112543</td>\n",
              "      <td>0.001420</td>\n",
              "      <td>0.614504</td>\n",
              "      <td>5</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.347382</td>\n",
              "      <td>0.090194</td>\n",
              "      <td>0.145150</td>\n",
              "      <td>0.202335</td>\n",
              "      <td>0.002744</td>\n",
              "      <td>0.339568</td>\n",
              "      <td>7</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.218400</td>\n",
              "      <td>0.059510</td>\n",
              "      <td>0.252165</td>\n",
              "      <td>0.711295</td>\n",
              "      <td>0.003874</td>\n",
              "      <td>0.918567</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.366064</td>\n",
              "      <td>0.082147</td>\n",
              "      <td>0.149304</td>\n",
              "      <td>0.201731</td>\n",
              "      <td>0.003290</td>\n",
              "      <td>0.343180</td>\n",
              "      <td>7</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0.291877</td>\n",
              "      <td>0.079981</td>\n",
              "      <td>0.141782</td>\n",
              "      <td>0.289309</td>\n",
              "      <td>0.003455</td>\n",
              "      <td>0.344605</td>\n",
              "      <td>7</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>361</th>\n",
              "      <td>0.016947</td>\n",
              "      <td>0.138827</td>\n",
              "      <td>0.118400</td>\n",
              "      <td>0.358567</td>\n",
              "      <td>0.281687</td>\n",
              "      <td>0.302936</td>\n",
              "      <td>6</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>362</th>\n",
              "      <td>0.131043</td>\n",
              "      <td>0.069016</td>\n",
              "      <td>0.029354</td>\n",
              "      <td>0.060197</td>\n",
              "      <td>0.282093</td>\n",
              "      <td>0.253809</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>363</th>\n",
              "      <td>0.036182</td>\n",
              "      <td>0.032010</td>\n",
              "      <td>0.030090</td>\n",
              "      <td>0.071069</td>\n",
              "      <td>0.359737</td>\n",
              "      <td>0.435486</td>\n",
              "      <td>5</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>364</th>\n",
              "      <td>0.014562</td>\n",
              "      <td>0.127332</td>\n",
              "      <td>0.035014</td>\n",
              "      <td>0.178579</td>\n",
              "      <td>0.803566</td>\n",
              "      <td>0.311641</td>\n",
              "      <td>6</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>365</th>\n",
              "      <td>0.014427</td>\n",
              "      <td>0.134185</td>\n",
              "      <td>0.033460</td>\n",
              "      <td>0.186430</td>\n",
              "      <td>0.891134</td>\n",
              "      <td>0.311652</td>\n",
              "      <td>6</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>366 rows × 7 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "           AC       CAL        GR         K        RD        SP  Core Lithology\n",
              "0    0.038756  0.026970  0.094776  0.112543  0.001420  0.614504               5\n",
              "1    0.347382  0.090194  0.145150  0.202335  0.002744  0.339568               7\n",
              "2    0.218400  0.059510  0.252165  0.711295  0.003874  0.918567               3\n",
              "3    0.366064  0.082147  0.149304  0.201731  0.003290  0.343180               7\n",
              "4    0.291877  0.079981  0.141782  0.289309  0.003455  0.344605               7\n",
              "..        ...       ...       ...       ...       ...       ...             ...\n",
              "361  0.016947  0.138827  0.118400  0.358567  0.281687  0.302936               6\n",
              "362  0.131043  0.069016  0.029354  0.060197  0.282093  0.253809               3\n",
              "363  0.036182  0.032010  0.030090  0.071069  0.359737  0.435486               5\n",
              "364  0.014562  0.127332  0.035014  0.178579  0.803566  0.311641               6\n",
              "365  0.014427  0.134185  0.033460  0.186430  0.891134  0.311652               6\n",
              "\n",
              "[366 rows x 7 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "H2_eUnyJQHlV",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "correct_facies_labels = np.array(training_data['Core Lithology'].values)\n",
        "correct_facies_labels_test = np.array(testing_data['Core Lithology'].values)\n",
        "feature_vectors = np.array(training_data.drop(['Core Lithology'], axis=1))\n",
        "feature_vectors_test = np.array(testing_data.drop(['Core Lithology'], axis=1))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UYf1ygcjQNav",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X_train = feature_vectors.reshape([3345,-1,6]) \n",
        "X_test = feature_vectors_test.reshape([366,-1,6])\n",
        "y_train = correct_facies_labels\n",
        "y_test = correct_facies_labels_test"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sfgj7-SdYdGG",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X_trains = feature_vectors\n",
        "X_tests = feature_vectors_test"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0jioXfhMT4Us",
        "colab_type": "text"
      },
      "source": [
        "#DNN分类"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Jgb5U9XPT63j",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import tensorflow as tf"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DImCC4GEUEiv",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 259
        },
        "outputId": "e1763e60-3d77-443b-9a68-7780945b174c"
      },
      "source": [
        "model =tf.keras.Sequential([\n",
        "                            tf.keras.layers.Dense(16,input_shape=[6],activation='relu'),\n",
        "                            tf.keras.layers.Dense(32,activation='relu'),\n",
        "                            tf.keras.layers.Dense(6,activation='linear')\n",
        "])\n",
        "model.summary()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"sequential_7\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "dense_24 (Dense)             (None, 16)                112       \n",
            "_________________________________________________________________\n",
            "dense_25 (Dense)             (None, 32)                544       \n",
            "_________________________________________________________________\n",
            "dense_26 (Dense)             (None, 6)                 198       \n",
            "=================================================================\n",
            "Total params: 854\n",
            "Trainable params: 854\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "aP0ecll2VNTX",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "tf.keras.optimizers.Adam(\n",
        "    learning_rate=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False,\n",
        "    name='Adam'\n",
        ")\n",
        "model.compile(loss='mse',metrics=['acc'])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "e3fZjDskVcW7",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "e8bf3365-2c3a-4510-89a2-5089dab76bc9"
      },
      "source": [
        "model.fit(X_trains,y_train,epochs=50,validation_data=(X_tests,y_test))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/50\n",
            "105/105 [==============================] - 0s 4ms/step - loss: 17.5394 - acc: 0.0439 - val_loss: 10.6035 - val_acc: 0.0546\n",
            "Epoch 2/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 5.9346 - acc: 0.0508 - val_loss: 4.2780 - val_acc: 0.1038\n",
            "Epoch 3/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 4.3156 - acc: 0.0990 - val_loss: 4.1216 - val_acc: 0.0984\n",
            "Epoch 4/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 4.1905 - acc: 0.0909 - val_loss: 3.9587 - val_acc: 0.1120\n",
            "Epoch 5/50\n",
            "105/105 [==============================] - 0s 4ms/step - loss: 4.1264 - acc: 0.0966 - val_loss: 3.8858 - val_acc: 0.1202\n",
            "Epoch 6/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 4.0915 - acc: 0.1037 - val_loss: 3.8524 - val_acc: 0.1230\n",
            "Epoch 7/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 4.0611 - acc: 0.1097 - val_loss: 3.8340 - val_acc: 0.1339\n",
            "Epoch 8/50\n",
            "105/105 [==============================] - 0s 4ms/step - loss: 4.0474 - acc: 0.1226 - val_loss: 3.7956 - val_acc: 0.1475\n",
            "Epoch 9/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 4.0135 - acc: 0.1283 - val_loss: 3.7799 - val_acc: 0.1585\n",
            "Epoch 10/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.9881 - acc: 0.1312 - val_loss: 3.8071 - val_acc: 0.1694\n",
            "Epoch 11/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.9617 - acc: 0.1366 - val_loss: 3.7362 - val_acc: 0.1530\n",
            "Epoch 12/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.9287 - acc: 0.1354 - val_loss: 3.7236 - val_acc: 0.1557\n",
            "Epoch 13/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.9034 - acc: 0.1423 - val_loss: 3.7267 - val_acc: 0.1612\n",
            "Epoch 14/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.8632 - acc: 0.1366 - val_loss: 3.6949 - val_acc: 0.1557\n",
            "Epoch 15/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.8372 - acc: 0.1336 - val_loss: 3.7110 - val_acc: 0.1612\n",
            "Epoch 16/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.8050 - acc: 0.1357 - val_loss: 3.7040 - val_acc: 0.1667\n",
            "Epoch 17/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.7652 - acc: 0.1387 - val_loss: 3.6708 - val_acc: 0.1311\n",
            "Epoch 18/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.7385 - acc: 0.1372 - val_loss: 3.6514 - val_acc: 0.1311\n",
            "Epoch 19/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.6999 - acc: 0.1294 - val_loss: 3.6088 - val_acc: 0.1503\n",
            "Epoch 20/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.6592 - acc: 0.1312 - val_loss: 3.5929 - val_acc: 0.1475\n",
            "Epoch 21/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.6229 - acc: 0.1268 - val_loss: 3.5885 - val_acc: 0.1230\n",
            "Epoch 22/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.5947 - acc: 0.1312 - val_loss: 3.6034 - val_acc: 0.1093\n",
            "Epoch 23/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.5494 - acc: 0.1256 - val_loss: 3.6223 - val_acc: 0.1530\n",
            "Epoch 24/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.5274 - acc: 0.1259 - val_loss: 3.5704 - val_acc: 0.1202\n",
            "Epoch 25/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.4986 - acc: 0.1097 - val_loss: 3.5415 - val_acc: 0.0956\n",
            "Epoch 26/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.4669 - acc: 0.1028 - val_loss: 3.5216 - val_acc: 0.1038\n",
            "Epoch 27/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.4370 - acc: 0.0969 - val_loss: 3.5171 - val_acc: 0.1011\n",
            "Epoch 28/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.4037 - acc: 0.0993 - val_loss: 3.5805 - val_acc: 0.0710\n",
            "Epoch 29/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.3876 - acc: 0.0861 - val_loss: 3.5046 - val_acc: 0.1011\n",
            "Epoch 30/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.3599 - acc: 0.0879 - val_loss: 3.4926 - val_acc: 0.1066\n",
            "Epoch 31/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.3389 - acc: 0.0903 - val_loss: 3.5220 - val_acc: 0.0710\n",
            "Epoch 32/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.3180 - acc: 0.0960 - val_loss: 3.4962 - val_acc: 0.1202\n",
            "Epoch 33/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.2967 - acc: 0.0897 - val_loss: 3.4774 - val_acc: 0.0874\n",
            "Epoch 34/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.2781 - acc: 0.0927 - val_loss: 3.4674 - val_acc: 0.1393\n",
            "Epoch 35/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.2648 - acc: 0.0981 - val_loss: 3.4677 - val_acc: 0.1011\n",
            "Epoch 36/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.2437 - acc: 0.0975 - val_loss: 3.4589 - val_acc: 0.1066\n",
            "Epoch 37/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.2209 - acc: 0.0903 - val_loss: 3.5104 - val_acc: 0.0874\n",
            "Epoch 38/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.2090 - acc: 0.0846 - val_loss: 3.5103 - val_acc: 0.0683\n",
            "Epoch 39/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.2056 - acc: 0.0780 - val_loss: 3.4423 - val_acc: 0.0710\n",
            "Epoch 40/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.1834 - acc: 0.0747 - val_loss: 3.4626 - val_acc: 0.0820\n",
            "Epoch 41/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.1580 - acc: 0.0747 - val_loss: 3.4599 - val_acc: 0.0628\n",
            "Epoch 42/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.1483 - acc: 0.0688 - val_loss: 3.4630 - val_acc: 0.0656\n",
            "Epoch 43/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.1347 - acc: 0.0756 - val_loss: 3.4876 - val_acc: 0.0683\n",
            "Epoch 44/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.1272 - acc: 0.0714 - val_loss: 3.4470 - val_acc: 0.0656\n",
            "Epoch 45/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.1148 - acc: 0.0700 - val_loss: 3.4483 - val_acc: 0.0656\n",
            "Epoch 46/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.0923 - acc: 0.0685 - val_loss: 3.4526 - val_acc: 0.0710\n",
            "Epoch 47/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.0867 - acc: 0.0744 - val_loss: 3.4262 - val_acc: 0.0738\n",
            "Epoch 48/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.0798 - acc: 0.0682 - val_loss: 3.4415 - val_acc: 0.0738\n",
            "Epoch 49/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.0638 - acc: 0.0679 - val_loss: 3.4439 - val_acc: 0.0683\n",
            "Epoch 50/50\n",
            "105/105 [==============================] - 0s 3ms/step - loss: 3.0576 - acc: 0.0712 - val_loss: 3.4666 - val_acc: 0.0738\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tensorflow.python.keras.callbacks.History at 0x7f4f04bb1278>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 48
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AdKCZtQXQj_s",
        "colab_type": "text"
      },
      "source": [
        "#RNN分类"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1dMkg7aOALuv",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "8704d9b9-12cb-46ab-d0fa-a0a7da7de5fe"
      },
      "source": [
        "import tensorflow as tf\n",
        "print('tensorflow:',format(tf.__version__))\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensorflow: 2.2.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7yUc0K9qIUfE",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 432
        },
        "outputId": "ecf63fe8-73bf-4b96-e666-bf51ae33257f"
      },
      "source": [
        "model =  tf.keras.Sequential([\n",
        "                              tf.keras.layers.GRU(64,input_shape=[None,6],return_sequences=True),\n",
        "                              tf.keras.layers.Dropout(0.3),\n",
        "                              tf.keras.layers.BatchNormalization(),\n",
        "                              tf.keras.layers.GRU(128,return_sequences=True),\n",
        "                              tf.keras.layers.Dropout(0.3),\n",
        "                              tf.keras.layers.BatchNormalization(),\n",
        "                              tf.keras.layers.Dense(64),\n",
        "                              tf.keras.layers.Dense(7,activation='linear')\n",
        "])\n",
        "model.summary()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"sequential_11\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "gru_22 (GRU)                 (None, None, 64)          13824     \n",
            "_________________________________________________________________\n",
            "dropout_22 (Dropout)         (None, None, 64)          0         \n",
            "_________________________________________________________________\n",
            "batch_normalization_22 (Batc (None, None, 64)          256       \n",
            "_________________________________________________________________\n",
            "gru_23 (GRU)                 (None, None, 128)         74496     \n",
            "_________________________________________________________________\n",
            "dropout_23 (Dropout)         (None, None, 128)         0         \n",
            "_________________________________________________________________\n",
            "batch_normalization_23 (Batc (None, None, 128)         512       \n",
            "_________________________________________________________________\n",
            "dense_22 (Dense)             (None, None, 64)          8256      \n",
            "_________________________________________________________________\n",
            "dense_23 (Dense)             (None, None, 7)           455       \n",
            "=================================================================\n",
            "Total params: 97,799\n",
            "Trainable params: 97,415\n",
            "Non-trainable params: 384\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LWjhpr74J8ED",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "model.compile(optimizer='adam',loss='mse',\n",
        "              metrics=['acc'])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "erY91C_TKL5l",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "bcedc0d1-d579-4f63-c033-38f9ecb3ebb5"
      },
      "source": [
        "history=model.fit(X_train,y_train,\n",
        "         epochs=100,\n",
        "         validation_data=(X_test,y_test))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/100\n",
            "105/105 [==============================] - 2s 21ms/step - loss: 14.9243 - acc: 0.1049 - val_loss: 4.4502 - val_acc: 0.0000e+00\n",
            "Epoch 2/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 6.1178 - acc: 0.0981 - val_loss: 4.3247 - val_acc: 0.0410\n",
            "Epoch 3/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 5.3543 - acc: 0.1109 - val_loss: 4.3334 - val_acc: 0.0301\n",
            "Epoch 4/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 5.0633 - acc: 0.1088 - val_loss: 4.2929 - val_acc: 0.0273\n",
            "Epoch 5/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.8883 - acc: 0.1061 - val_loss: 4.3247 - val_acc: 0.0519\n",
            "Epoch 6/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.7289 - acc: 0.1169 - val_loss: 4.3352 - val_acc: 0.0546\n",
            "Epoch 7/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.6722 - acc: 0.1100 - val_loss: 4.3336 - val_acc: 0.1639\n",
            "Epoch 8/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.6111 - acc: 0.1160 - val_loss: 4.2930 - val_acc: 0.1694\n",
            "Epoch 9/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.5783 - acc: 0.1085 - val_loss: 4.2966 - val_acc: 0.0137\n",
            "Epoch 10/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.5282 - acc: 0.1097 - val_loss: 4.3298 - val_acc: 0.0301\n",
            "Epoch 11/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4734 - acc: 0.0993 - val_loss: 4.2894 - val_acc: 0.0137\n",
            "Epoch 12/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4597 - acc: 0.1034 - val_loss: 4.2929 - val_acc: 0.0109\n",
            "Epoch 13/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4469 - acc: 0.1088 - val_loss: 4.3353 - val_acc: 0.0027\n",
            "Epoch 14/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.4291 - acc: 0.1115 - val_loss: 4.3435 - val_acc: 0.0191\n",
            "Epoch 15/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4689 - acc: 0.0999 - val_loss: 4.3305 - val_acc: 0.0246\n",
            "Epoch 16/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.4210 - acc: 0.1040 - val_loss: 4.2857 - val_acc: 0.1475\n",
            "Epoch 17/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4084 - acc: 0.1145 - val_loss: 4.3202 - val_acc: 0.0164\n",
            "Epoch 18/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4224 - acc: 0.1088 - val_loss: 4.4350 - val_acc: 0.2158\n",
            "Epoch 19/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3975 - acc: 0.1022 - val_loss: 4.3626 - val_acc: 0.2186\n",
            "Epoch 20/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4746 - acc: 0.1091 - val_loss: 4.2876 - val_acc: 0.1667\n",
            "Epoch 21/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3712 - acc: 0.1076 - val_loss: 4.2978 - val_acc: 0.0164\n",
            "Epoch 22/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3584 - acc: 0.1154 - val_loss: 4.2905 - val_acc: 0.0027\n",
            "Epoch 23/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4120 - acc: 0.1118 - val_loss: 4.2777 - val_acc: 0.2432\n",
            "Epoch 24/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4301 - acc: 0.1253 - val_loss: 4.3136 - val_acc: 0.0137\n",
            "Epoch 25/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.4090 - acc: 0.1190 - val_loss: 4.2980 - val_acc: 0.0820\n",
            "Epoch 26/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3760 - acc: 0.1094 - val_loss: 4.2837 - val_acc: 0.2077\n",
            "Epoch 27/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3542 - acc: 0.1148 - val_loss: 4.2989 - val_acc: 0.0656\n",
            "Epoch 28/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3666 - acc: 0.1172 - val_loss: 4.2815 - val_acc: 0.0628\n",
            "Epoch 29/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3771 - acc: 0.1184 - val_loss: 4.2924 - val_acc: 0.1148\n",
            "Epoch 30/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3571 - acc: 0.1259 - val_loss: 4.4451 - val_acc: 0.0492\n",
            "Epoch 31/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3763 - acc: 0.1459 - val_loss: 4.2850 - val_acc: 0.1066\n",
            "Epoch 32/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3792 - acc: 0.1178 - val_loss: 4.3887 - val_acc: 0.2186\n",
            "Epoch 33/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3671 - acc: 0.1291 - val_loss: 4.3054 - val_acc: 0.0437\n",
            "Epoch 34/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3414 - acc: 0.1303 - val_loss: 4.4046 - val_acc: 0.2186\n",
            "Epoch 35/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3713 - acc: 0.1342 - val_loss: 4.3299 - val_acc: 0.1284\n",
            "Epoch 36/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3602 - acc: 0.1423 - val_loss: 4.3266 - val_acc: 0.0109\n",
            "Epoch 37/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3624 - acc: 0.1432 - val_loss: 4.2723 - val_acc: 0.0956\n",
            "Epoch 38/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3666 - acc: 0.1510 - val_loss: 4.2789 - val_acc: 0.1366\n",
            "Epoch 39/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3566 - acc: 0.1492 - val_loss: 4.3044 - val_acc: 0.2077\n",
            "Epoch 40/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3542 - acc: 0.1438 - val_loss: 4.3808 - val_acc: 0.2186\n",
            "Epoch 41/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3566 - acc: 0.1366 - val_loss: 4.3404 - val_acc: 0.1202\n",
            "Epoch 42/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3541 - acc: 0.1584 - val_loss: 4.3069 - val_acc: 0.2186\n",
            "Epoch 43/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3575 - acc: 0.1438 - val_loss: 4.2673 - val_acc: 0.0765\n",
            "Epoch 44/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3443 - acc: 0.1489 - val_loss: 4.2993 - val_acc: 0.0656\n",
            "Epoch 45/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3547 - acc: 0.1507 - val_loss: 4.3622 - val_acc: 0.2213\n",
            "Epoch 46/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3462 - acc: 0.1614 - val_loss: 4.3953 - val_acc: 0.2186\n",
            "Epoch 47/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3446 - acc: 0.1447 - val_loss: 4.2530 - val_acc: 0.0738\n",
            "Epoch 48/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3380 - acc: 0.1495 - val_loss: 4.2832 - val_acc: 0.0601\n",
            "Epoch 49/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3413 - acc: 0.1477 - val_loss: 4.2626 - val_acc: 0.1257\n",
            "Epoch 50/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3379 - acc: 0.1474 - val_loss: 4.3011 - val_acc: 0.1913\n",
            "Epoch 51/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3384 - acc: 0.1683 - val_loss: 4.3225 - val_acc: 0.1284\n",
            "Epoch 52/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3400 - acc: 0.1528 - val_loss: 4.3042 - val_acc: 0.1831\n",
            "Epoch 53/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3454 - acc: 0.1578 - val_loss: 4.2877 - val_acc: 0.2186\n",
            "Epoch 54/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3446 - acc: 0.1453 - val_loss: 4.2860 - val_acc: 0.0027\n",
            "Epoch 55/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3289 - acc: 0.1552 - val_loss: 4.2940 - val_acc: 0.0191\n",
            "Epoch 56/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3500 - acc: 0.1572 - val_loss: 4.2873 - val_acc: 0.2022\n",
            "Epoch 57/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3403 - acc: 0.1507 - val_loss: 4.2983 - val_acc: 0.2186\n",
            "Epoch 58/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3450 - acc: 0.1507 - val_loss: 4.2861 - val_acc: 0.0601\n",
            "Epoch 59/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3345 - acc: 0.1534 - val_loss: 4.2855 - val_acc: 0.2213\n",
            "Epoch 60/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3276 - acc: 0.1387 - val_loss: 4.3022 - val_acc: 0.0792\n",
            "Epoch 61/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3351 - acc: 0.1465 - val_loss: 4.2864 - val_acc: 0.1066\n",
            "Epoch 62/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3292 - acc: 0.1468 - val_loss: 4.2980 - val_acc: 0.1284\n",
            "Epoch 63/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3272 - acc: 0.1229 - val_loss: 4.2918 - val_acc: 0.0738\n",
            "Epoch 64/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3324 - acc: 0.1393 - val_loss: 4.2949 - val_acc: 0.0683\n",
            "Epoch 65/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3275 - acc: 0.1441 - val_loss: 4.2956 - val_acc: 0.0574\n",
            "Epoch 66/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3299 - acc: 0.1402 - val_loss: 4.2864 - val_acc: 0.0273\n",
            "Epoch 67/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3413 - acc: 0.1390 - val_loss: 4.2900 - val_acc: 0.2322\n",
            "Epoch 68/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3344 - acc: 0.1581 - val_loss: 4.2890 - val_acc: 0.1230\n",
            "Epoch 69/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3361 - acc: 0.1510 - val_loss: 4.2851 - val_acc: 0.2240\n",
            "Epoch 70/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3386 - acc: 0.1504 - val_loss: 4.2887 - val_acc: 0.1230\n",
            "Epoch 71/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3395 - acc: 0.1405 - val_loss: 4.2814 - val_acc: 0.1967\n",
            "Epoch 72/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3287 - acc: 0.1504 - val_loss: 4.2962 - val_acc: 0.0246\n",
            "Epoch 73/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3340 - acc: 0.1492 - val_loss: 4.2844 - val_acc: 0.1831\n",
            "Epoch 74/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3348 - acc: 0.1393 - val_loss: 4.2879 - val_acc: 0.2131\n",
            "Epoch 75/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3301 - acc: 0.1507 - val_loss: 4.2867 - val_acc: 0.0765\n",
            "Epoch 76/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3298 - acc: 0.1459 - val_loss: 4.2968 - val_acc: 0.0546\n",
            "Epoch 77/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3340 - acc: 0.1480 - val_loss: 4.2858 - val_acc: 0.2186\n",
            "Epoch 78/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3276 - acc: 0.1471 - val_loss: 4.2870 - val_acc: 0.2077\n",
            "Epoch 79/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3360 - acc: 0.1411 - val_loss: 4.2848 - val_acc: 0.2158\n",
            "Epoch 80/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3332 - acc: 0.1402 - val_loss: 4.2825 - val_acc: 0.0792\n",
            "Epoch 81/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3363 - acc: 0.1546 - val_loss: 4.2877 - val_acc: 0.1284\n",
            "Epoch 82/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3326 - acc: 0.1453 - val_loss: 4.2836 - val_acc: 0.0847\n",
            "Epoch 83/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3345 - acc: 0.1474 - val_loss: 4.2951 - val_acc: 0.0137\n",
            "Epoch 84/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3373 - acc: 0.1339 - val_loss: 4.2829 - val_acc: 0.1366\n",
            "Epoch 85/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3373 - acc: 0.1357 - val_loss: 4.2824 - val_acc: 0.2077\n",
            "Epoch 86/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3336 - acc: 0.1384 - val_loss: 4.2822 - val_acc: 0.1995\n",
            "Epoch 87/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3270 - acc: 0.1244 - val_loss: 4.2940 - val_acc: 0.0738\n",
            "Epoch 88/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3306 - acc: 0.1480 - val_loss: 4.2903 - val_acc: 0.0137\n",
            "Epoch 89/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3388 - acc: 0.1288 - val_loss: 4.2887 - val_acc: 0.1284\n",
            "Epoch 90/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3300 - acc: 0.1288 - val_loss: 4.2862 - val_acc: 0.1803\n",
            "Epoch 91/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3321 - acc: 0.1519 - val_loss: 4.2967 - val_acc: 0.1803\n",
            "Epoch 92/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3261 - acc: 0.1453 - val_loss: 4.3108 - val_acc: 0.2377\n",
            "Epoch 93/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3309 - acc: 0.1360 - val_loss: 4.3196 - val_acc: 0.0492\n",
            "Epoch 94/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3360 - acc: 0.1519 - val_loss: 4.2828 - val_acc: 0.0628\n",
            "Epoch 95/100\n",
            "105/105 [==============================] - 1s 11ms/step - loss: 4.3316 - acc: 0.1283 - val_loss: 4.2946 - val_acc: 0.0929\n",
            "Epoch 96/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3296 - acc: 0.1408 - val_loss: 4.2911 - val_acc: 0.2268\n",
            "Epoch 97/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3345 - acc: 0.1468 - val_loss: 4.2909 - val_acc: 0.0847\n",
            "Epoch 98/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3294 - acc: 0.1402 - val_loss: 4.2909 - val_acc: 0.2240\n",
            "Epoch 99/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3316 - acc: 0.1315 - val_loss: 4.2961 - val_acc: 0.2213\n",
            "Epoch 100/100\n",
            "105/105 [==============================] - 1s 10ms/step - loss: 4.3305 - acc: 0.1318 - val_loss: 4.2816 - val_acc: 0.0464\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YJeqcSkoLhWd",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "ead8a734-92eb-44fc-de4a-e7c159938901"
      },
      "source": [
        "history.history.keys()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "dict_keys(['loss', 'acc', 'val_loss', 'val_acc'])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 89
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7Hr4OVpsMBjQ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 282
        },
        "outputId": "b0b1df36-17aa-41fb-b29c-fd03d222232b"
      },
      "source": [
        "plt.plot(history.epoch,history.history.get('acc'),label='acc')\n",
        "plt.plot(history.epoch,history.history.get('val_acc'),label='val_acc')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f6dcfdeb438>]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 38
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydeZwcR332vzX37uytXd3HSpZ8yJJ8ySc22NgYG4IxhBuDnZAY5xMghDcEkrxAAiGQAAmQFwIOOCEYwmEug20MPvGBbUk+dFjWfa2u3dXex1w99f7R3TPdPdU9M7uzq9W6ns9HH+3OVHdV98w+9fRTv9+vhJQSDQ0NDY3Zi9DJHoCGhoaGxtRCE72GhobGLIcmeg0NDY1ZDk30GhoaGrMcmug1NDQ0ZjkiJ3sAXrS3t8vOzs6TPQwNDQ2NUwqbNm3qlVJ2qN6bcUTf2dnJxo0bT/YwNDQ0NE4pCCEO+L2nrRsNDQ2NWQ5N9BoaGhqzHJroNTQ0NGY5NNFraGhozHJootfQ0NCY5dBEr6GhoTHLoYleQ0NDY5ZDE73GxLH/ceh+6WSPQkNDoww00WtMHL/8C3jsSyd7FBoaGmUw4zJjpxxGDjLDxd8TLSDE9PSdTUFu3PxZhCHRND39ThWc11MpxgcAa7ObaD1E4jUfloaGhhsvP6L/7o2w/7Hi7xfcAm/4ytT3mxqCf13tnmTe+HU479216+PZ/4Hffw3+/OnanTMI+aw5cVaK338d7v+b4u/17fDhzRBLqtuf2AO3XwnvfxTaVkxqqBoaMwbffRMsuQSu/Ni0dfnys27698OiC+C6z0PLMujbNz39jp0wSX7t28y+kx2w56Ha9tG7C3pegunaHtLImmRfKfr3myr+us/DZR+Esd7ge9C/H9JDMHBwsiPV0Jg56NkBJ3ZNa5cvP6I3sjDvbLjkz6Blqfn7dCBvKd9V15p9L70Ejjxb4z4M9/9TjXyuuvtnZCDWYF7/1Z8ybbPtvwo+P0zfZ6ShMR0wMsXv9jTh5Uf0+SyEoubP4RgY6enp1yarsOWWLTwf+vbCWF/t+rDVdTUqezIwMtWRcD5r3nOAcBTOuB52/tr/HPbrmug1ZhOMrCb6KYeRM0kGzIVAIzM9/dofrD3JLLrA/L+Wqt4mxOn6ElVr3RjZ4kQHcObrITUAB55Qt7evY7omLg2N6UA+N31P3RZefkSfz0LIIptwdBqtG1vRW0S/8FxAwOEaEv10Wh35PEijSuvG8TQFcNrVEKmDl+7x6UNbNxqzENq6mQYY2SLZhmOQmy7rxlb0YfP/RDO0nz41RD8dX6L8BGwVI1O0bgBi9bDyapPoVQvI2rrRmG2QUls3NcNID/z8z+HQM+7XpfR49PHyJLL/cXjknyc/JpsYnYp20flweFPtomSmkxiNCawH5HNu6wZM+2bosNrCKkwm02SvaWhMNfIGIDXRTxqHN8Htr4Ln74TdD7jfs32xgqKPlieRrT+BJ786+XEZHusGTJ9+tBsGuyZ/fpheT7sWih7g9OvM5DGVfTORyURDYyajEDChPfqJ49nvwh3Xm8QhQqUkVFDVtkdfQdRNeqQ2Ctn+YL2KHszJqRYoEP00fImMCdhEXo8eoL4Nll2mDrO0r6OapCwNjZmM6Q6YsDB7iL5nJ/zyQ7DsUrj1EdOW8SpBr6qOxMqTeGakNoqysBjrsC7mrTEnm1pF3kyrdZNx/1/RMVn3E42NVddC7w4Y7XW/rq0bjdmGk0T0s6cEQsfpcPMvzdTicMSyZTw30xviGI6VJ5H0MMi8qS7thdSJwFB49JG4Sfa1WpCd6dZNPgvhhtLX61rM/7OeujnautGYbchrRT95dF5eVMzhaICid1g3+ZwZKuiHzKj72InCaxvZWHQBHHmuNnbLRMh3opiodeP16KE4+Xkn3cL1aOtGY5bA0B59bRFSLLR6I19s0glS9ZkR97EThU1WXuti0QVmH707J3d+Zx/ToRYmat14Jzoo3hPvuO3r0daNxmyB/V2eiYpeCHGdEGKHEGK3EOLjivc/IoR4UQixWQjxoBBimeO9m4UQu6x/N9dy8IFQWTdej74Sok+PuI+dKAq2kVfR13BBdjofCyds3agUfUR9Lp0ZqzHbMJ25Lg6UJXohRBj4GnA9sBp4pxBitafZc8B6KeU64C7gX6xj24BPARcDFwGfEkK01m74AQhFSgnCG/lSjaKvlXXjVfRzVpnjqYWin85MUnsSlUbleQBGRr0YW1D0PlFSOmFKY7ZgBiv6i4DdUsq9UsoM8APgjc4GUsqHpZRj1q9PAYutn18L/FZK2Sel7Ad+C1xXm6GXgaq8gTfyJVKG6KV0EP0k7QPVYixAKASRRG3IzDgJi7FQ+diddYacKHj0ftaNJnqNWYIZ7NEvAg45fu+yXvPD+4D7qjlWCHGrEGKjEGJjT09PBUOqAPZCqxNesi2n6LNjZsQNTJ48C9aNInInHKlRrP40Ll4671mlk6CRKZ3ooLyi19aNxmzBTLVuqoEQ4iZgPfCFao6TUt4upVwvpVzf0dFRm8GEIv6LsSUevQ+R2P48TJ48VZmxNlQLxxPBdHrazntWaX9+Hr19T7yfg651ozHbMIOtm8PAEsfvi63XXBBCXAP8HXCDlDJdzbFTApV1Y3gWRG3S8StslnES/SSJWFXrxobq6WMimM5kDGcflU6C3jLFNkLao9d4mWAGZ8ZuAFYJIZYLIWLAO4C7nQ2EEOcB38Qk+W7HW/cD1wohWq1F2Gut16YeoWjpzfRV9D4knnbs7zpp68ZTZ8eJmlk3tqc9U60bRQkEKJJ/SYKbvWOWJnqNWYLpLFPiQNnMWCllTgjxAUyCDgN3SCm3CSE+DWyUUt6NadU0AD8WQgAclFLeIKXsE0J8BnOyAPi0lLKGWyoFIByBnIeASjx6H8vARqbW1o1Qe/QvB+vGrhxaTcKUtm40ZhtOknVTUQkEKeW9wL2e1z7p+PmagGPvAO6Y6AAnjHCsmNVqwxvLXlD0ftaN4/haWDeqZCF7HLW0bqZl45EqrRu7vcq60eGVGi8XnCTx8vLKjPWWQIjErdenwbrxK+hlj6eW1s1MVPT2PQ5U9DozVmOWYwZ79KcmwhGF5zsZ66YG4ZUqf9oeT00qZM5gj94vjwCKE69veKWudaMxS1D4jsvgGls1xuwlehV5+pVA8Iu6SdeY6FW2hT2OmiRMzeCom6DwUr8wV71nrMZsg+tJePoEzOwlemVmrNejt62bChR9LawbP0VfC+vGXuyEmWnd+JWAAEd4pU+Cm7ZuNGYLnN9lTfQ1QFgRXlmi6H2iPWw4PfqaWDc+ir4W1o10PAZOh3XjKoFQhXWjTJjSRc00XiZwcpIm+hqgqjLFlSRM1WIx1s+6qUF45UQyVSfVn9Ojr2QxNsCj90uYKih67dFrzBJo66bGCMqMLWwlWMa6SY8U7Z1JJ0wFWTeKksoTOb+N6axeCZV9YYOsG78nK72VoMZsg8u6mb6kqdlL9EGZsQWPvox1kxkxN68OalMpgsIra2HdTPcjYbUTSyG8sorqlTozVmO2QVs3NYZqgXMiUTd1Vvn8SStuIyBhSvH0US2qVdiTRdXhlfbTlCqOPgQiFGDdaKLXmCXQi7E1RjjmH5dd4tEHRN0UiL4GmbG+CVM1IPqZbt3Y9y9oQdpv/wBN9BqzBdqjrzFCUTMSxemDeT16IYLrzDiJvibhlVMYdeN6JJyOEghVTixBHj347B+go240Zhlcf6fao588VCF7+SyIsEnwhXaxgPDKEahrsc4zWesmIDO2JtaNk3inw7qpNrwyoAQCqK02reg1Zhu0dVNjqEL2VAuikQCiz4xAvNn0j2uyGFuFbVEtpnuRx8hCpK7y/rx7AXgRlMmsiV5jtkBbNzWGqo6NSlX7Kfp83iL6htpZK0GK/lS0bqIW0VcVdeOn6BUhps6EqUo3INfQmMnQUTc1horoVao6HCutWw+QtUoUxxqsyaAGce5TuRjrvc6phpGFWNL6uYKnnXIefSiiWDw/OX8UGhpTBh1HX2OorJtqFL1d0CzeYPnHk7VucupNRwpjlZP74E+GdROtt/qrIjM2cLLzKSvt/VlD41SFtm5qDKV1o1DVfkRvlz+INdbIuimTGQuTm0xc1SSny7pJWP1VXr3ysT2D6vf9wivtyURnx2rMBmiirzFUFRENRWExvzozdkGzuG3d1KLWTTmin0Qf0/0FMrJmeQiV5aJsb97j//PTFxkcU7QPRzxPJXkzPDZaxYKvhsZMh9dhmCbMXqL3C68sibqJl1H0DerQv2pRbuMRu82Ez2+NT4Smrx59OFr5frfWmDIyzO929ZS+751M7WuI2usA2rrRmAXQir7GKGS9eqosKj16BYnY+8Xair4WUTG+1SvtSWkS9oRtn0TqpmkxNmOq+UoLslljyhLhkR0KovfaY/bPhcgebd1ozALYT8KgF2NrApVKVpFtOKqudZP2ePS1sG6CNge320wUBQVcN30bj4SjVVs3OcI8urObfN4TLumdMAwP0WvrRmM2wBmWrBV9DaCybpSK3s+6sTz6WHIarZvJEL2DGKdrMTYcC84sdrU3v9RZIvSOZNh6xLMo650wChOXvRirrRuNWQBXtJom+slDGV6pirrxUeuu8MoaWDflNh6BycXqOxXwdC3GVmXdZDAIsW5JG0JQat94PwevotfWjcZsgKEVfW2hTJjyi6NXWDf2Ymw0WaMSBVMdXmn5fdNJ9FVZN1lyRFjSVs+6xS08vKPb/b73Hns9el3YTGM2wGXdaI9+8vCLo/cmLQUlTMUazFrpk7VupCxGqahQS+tmuhZjXdZNpUQfJhkLc9UZHTx/aIC+Ucd9D/tYNzEddaMxi2BkIGLln2hFXwNUVdRMFXUzbBI9VO5D+8Geucsq+lpYN4lpUvQ5h3VTWZnirAxTH4tw1RlzkRIec4ZZehW94VhcBk30GrMDRk5bNzWFr6JXWDd+UTdxi+gnmxlb2PDErwRCDcIrnYuX0xVeWYV1I3MZMkRIxsOsXdTMnGSMh19y2Ddhz9aPBeumijILGhozHTrqpsbwy4xVFTVTKvoRh6Kf5ObdZeu8WOGVk5pM7Dj6xPRVrwxFK1b0Ri5DFlPRh0KCV53ewaM7e4phlmUXYzXRa8wCGBlN9DWFX2ZsNUXN4o1WmwqzP/1gf6DTYt3UT591E45W7NEb2TRZaSp6gLMXNdM/lmU45bg3yvBKTfQaswhGzrGPg16MnTz8MmOVRc3SpfXOnYp+0taNvYWh36Yb1uu16COamNyEUSmqtG6MnLkYWx8zr7W13vwc+sfsOvWepyZvCQRt3WjMBhiZYjFArehrAL/MWJWi97aD4qYjUDvrxlfRKyalajGdmbFSVm/dZNNkiZCMmYq+td685j6b6L0ThrZuNGYjnBVZNdHXAH6ZsV5VHfEh2fRIMbRv0taNTfTlEqZqUL0ykph6UrQfOcOxip92jFzW9Ojj5j1osRT9gEvRq+LodWasxiyBHWatwytrCL/MWD9F7428qaV1Yz8NBO2uBJOsXmmFO9ZiE5OyfdmLy5WHV8qcW9G3Jc373j/qeNpxbhlYEl6pM2M1TnGcxPpNs5fo/TJjVSUQvO3yBmTHPIuxtQivLKfoJ/nUEIoWn1im8ktkj7MK6yZvuD36Fsu6cXn0UBx3SXilLmqmcYqjIJBi01dO3MLsJfqQisAVFSTtkqFOknXWoofJE32l4ZWT6sNRH36y56qkLyj2V0kcvZElIyPUW4q+KREhHBJFog95rLZCZqy2bjRmCZw8EIpooq8JQiEQ4fKZsaqFUGdBM7uN01aoFuXCK6vdeKR7Oxx8qrSPUNihjKeQGJ0bfVc6CdqK3gqvFELQUhelf8yhcpzn1kXNNGYbDMd3fSYSvRDiOiHEDiHEbiHExxXvv1II8awQIieEeIvnPUMI8bz17+5aDbwiOElISpCGwqNX2CZeRT/ZHaAKRF9u45EKyfmRz8Ov/tLTh2XdFJTxVFo3Dl+9CqI3PfriPWhNxtyLsVAct7dMsQ6v1DjV4bRwQ5FpjaP3YZ4ihBBh4GvAa4AuYIMQ4m4p5YuOZgeBW4C/UpxiXEp5bg3GWj1CjrT6wmzqjbpRWDcFRd/oPiZo39cg+PVto9rwysxIcQesQh+54iMhTC0xGg5yrnSh2jAzY+uixTIQrfVRx2KsZ9zOKCKYntwADY2phOvvJjzjFP1FwG4p5V4pZQb4AfBGZwMp5X4p5WYgPwVjnDicVSf97JNC1I1T0dubjjS420yUPPMOBaxCtU8M2VTppFBi3UziS5RNwb+uhp33q9/POzz6CnMMRD6HDEUJhUThtZb6WOlibOHz8jzmautG41RHYW1rZlo3i4BDjt+7rNcqRUIIsVEI8ZQQ4kZVAyHErVabjT09iv1EJwpneQOnr+xqo7JuHPvFwuQXOMuGV4arO38uVRoOWrBuarAYO94HQ4ehd6f6/RLrpjwJh/JZpGeia62POhZjPWsLE1jw1dCY0SixbmYW0U8Wy6SU64F3AV8WQpzmbSClvF1KuV5Kub6jo6N2PbusGz9FH2DdFBR9lR66F+U8eiGsMr0VqtacQtHbtlItwiuz41Y/iqqeoLZuyixUC5lDeCa61mSM/rEsUkqFonfcs8lmJmtozAS4/m6m16OvhOgPA0scvy+2XqsIUsrD1v97gUeA86oY3+Tgsm58fHKVP+5n3UzUPigXR2/3UbF1M26SvasPo6gUYHKK3j63H9E7bbCCVRT8pQ3ns0j7PlporY+RyeUZzxqK8EpvZI+2bjROcbism5nn0W8AVgkhlgshYsA7gIqiZ4QQrUKIuPVzO/AK4MXgo2oI5yO/X70ZlXXjDa9UeehSQs9OOL7N/DfY5T+OcnH0UN0uVrmUOZa8Y0nEzhFQZQRLCeMDlZ0bTI8eUG6xCO7rqTDZKyRzCM8kaxc26xvNlIaFGs7HXG3daMwCnETrpmzUjZQyJ4T4AHA/EAbukFJuE0J8GtgopbxbCHEh8DOgFXiDEOIfpJRnA2cB3xRC5DEnlc97onWmFs7QPz+PXhV1kxkxM9fs0D5V9uzWn8BP3uc4kYCPvAhNC0vHUS6O3n6vUjLLOYg45Cj65SJex5do9wPwg3fDR7ZDck4F5y9j3TjvZYXbIEZkDmHbZBbs7NiBsSyLC09NnvDKakI4NTRmMgrWzfQvxpYlegAp5b3AvZ7XPun4eQOmpeM97klg7STHOHE4CcLw8clVJG7vFyuEp41jMhg+av7/ptuh+0V44ssw2qsm+nLhleBfF1+FrMNacdbNcFo3zi/R4CFzUhg5VhnRZ8tYN97FWCjroYfJEYq4J7pCvZuxjDq8UoSsPXs10WvMApRkxs4sj/7UhVMl+0bdKIqaOfeLtc/jPAcUyXDNm2H5FdY5PL65jXLhlWBZNxXM8FIWFbdzYrCJXpUZa1+bN/beD+UUvfcL6+1PMeYIBqGI16M3x9o/li2dcJ0lpbV1ozEb4BRIM9CjP3XhUvR+Hr1P1E3cQfQq1ZpLmSUWwtFiUo8v0ZcJr7THVQmZ5XMgLW/eScS2daNajLXHZWf8lkM5j961UFrBQrU1lrBH0RcKm41mSifTvKMAXYW7WGlozGjkvYpeE31t4LyZfmSrtG6GId6kaOMgs1yqSPD21mC+CrhMeCVUbt3YoY/e/lxlinF/iex26QqJvlJF77JuAojYuq5Q1OPR19mKPuMIYXVkMtv3q5qFag2NmQpd1GyKYIXlDY5lyWYs0gqFPW1sReogtfRwsfwB+Fg348UtwewFXScJO1FReGWF1o3zqcHwEr0jjl6p6Cu0bgoevc8TinPNoYJa+tmsSfQRj3UTCYdoSkQYGMsqFL2D6LV1ozEb4LJutEdfO4RjSCPL9V/5HT/ftN98za8EQomibwxuk0sVlXzBuqnA0/ZDpWTmp+jt3bNUij5bpXVTcdRNrCLrZjyVsprHS95rTcbc4ZX2eZx1hbR1ozEb4LJutEdfO4QiGNkMRwZTHOodMl8rsW4iZnSHy6P3WjcKlaxS9OU8+sDF2AojS1zk7lyMzXoWYz3rCVC9R18j62Y8ZU4c0Wis5L1CvZtC6QbbanNUGtXWjcZsgLZupgjhKBnLNugbtmwLFdmGY25S81P0eR9Fb4c4liX6sPp9u4+KiD7Io4+q6+ZMNOqmkoSpCgqyjafM80RUir4+alo33mihfLY4wVYTeqqhMVMx0+vRn7IIRTEsou8fHjNfU8WyO0lWSkgPqT36iSp6e2FRCPX7YH3wlVg3To/eQX5GzmPdKDz6Shdjyyl6V9RN+ZILaUvRx6KlRN9mK3rvk4Hh8O2dNYs0NE5VzPKiZicP4Sh5q/yw9AuvBLdizIwC0qPofRY4C1E35cIrs8G2jTXW6hW9oz+vdaNU9FMRdVOJR2+eJxrzsW5c4ZWOKCkddaMxm1BSj14vxtYG4WiB4CMYhddK28WKNkXaKmhWzrrJjhctm3DUjKkPCq8st2FJxdZNWv1zwbpRFBmbKo++QusmkzbPF48nSt5rrY8ymjHISI/lZGjrRmOWYYbXoz91EYoi8lnWLW4mahO9KsTRqaZVRK+ybpyKHsyfg8Irg0Ir7XFVG3VTYt04yxRPoUefzwLCVCUVWDcpK7Q1pvDoW6wyCINp6R53Xls3GrMM2rqZGmQIE5IGrzq9g6gIUPSReJE0C0RfSdRNnfscQWV9yyr6Sq0bh13jUvRZk3j9JiWYQBx9gKK3n3IqsG6ytqJPlCr6Njs71iZ6ZwmEQniltm40ZgGMTHGtThN97TCYkkTJsXpBE2111kKob9SNTfRWGKYyjt4nMxbMn30XY3MVKPoKVWvOZzG2YN0EKHp7EivbR7k4egcJV2DdpDPmOONxddQNwIlxD9E775m2bjRmA5wCSSdM1Q59FtGvnNtAR511qUqPPqpQ9OUyY1NuRR9NBEeplCP6SjfXyCoUvZRF8vWrywNVWDfp4rjzim2AbWUCFVk3tqJPKDz6Qqni8ZyZz+CbGautG41THK5CfVrR1wy945KwkCxtSzCn3rpUpUevsm6cil5FnuMKRe/j0RtZZDjKjzYcYnDMhxAnEnVje+jObfeEMBeGVbVuKl6MVfThhEuZlK9HXyiBoEiYak06K1g6FqRdmbEVToIaGjMZhiOMWBN97dA7ZqrRuMgzJ2FeaiqvuORyit721AobjRvmzxV79FmyMsxf/2Qz33p8r7pNpaq1oOiFQ3l7iqaFPeUUKlD0o+kcH7trM/t6Rz3rAAo7Ku8pTwCBRJyzxxxWEL3t0dvZsa7wSifRa49e4xSHU7xooq8djo9aHpiRpdXy6A8PK26u0wNWET24a9HY5FeFR2+HD96z5ai5GXbJGCpUrbmUOV7nxOKtpROKep4+ilE3A6Mp/une7Qyn3MR551MH+OHGQ/zDL7d57CHFmFyVJctvPJLN+OcwJKJh6qJhM5betcdvrmgLhaIgDbWNpKFxqsCVBKjj6GuCnJGnZ8y6kfksLQmT6A/2K1S3K+pmyCxtoNqgxCYzmwhdij7hJkgn8jmy0ux/b88ou7oVFko1UTeROrfd5FX0oXCpohdhQPLw1gPc/ru9fPXBXYW3U1mD/3xsH8lYmEd29JBJjxbVt2ry8ioTCLRuctl08RoVaK2PmtaNZ49fQ0T4+iO7yYoKNjfR0JjpyGtFX3Mc7BsjlS8m4TTHICPDHOpX+OjhqCPqZrhUzYOlNq02tk9eqaLPZwtjEQLu2Xy0tI2tWlVq3wm79EIkFmzdOEs6GGmoN7cQ7DrWC8B/P7mfvT3mhPPjjYfoHUnztXefz6KWOnKpMWSixTxe9ZSRry680rDvrQ/Rt9THGLDLIBSKmmU5MpTlX369g929nicXDY1TEdq6qT329IySpRgRUh+W5IhwqG+stLHXulERvVNtKhV9gEdv5EgZIZrrolzY2cZ9WxVEX0H0CmD2EYm7Fb3KuvHaTBbRH+vtYUFzgngkzGfv2U7WyPONR/dy/tIWXnV6Bx997RlEZYYRkXQf77meaqybfNaxKbICbclYcd/YgqLPFdZYDg85InE0NE5VqIi+nLCrEWYx0Y+Qw1L0+SwinyMvIhxUEn3cnRmrVPSOiJAJKPrxfIgFzQlet2Y+O4+PsLvbE9NeyZZ8dt+ROo+i92xsEnbE6HqIvudEH+csbuGDr17Jgy9187G7NnN4YJwPvHolQghuWDuXqDA4MGp9IZUevTN6IAyIQBIuKHqfENMW27pxPonks3RbRH9w0LHrlIbGqQpXtrdtR06PTz9riX539wh1diamkYN8FhmKcLDPx7px1rpxEP1wKsv+3lH3QqFK0UeDFmOzjOcE85sTXL92AQD3bTnmblNBmKLdd18mRM+4KPZnf1mcJQMKk5J1XUmT6AcHBzhtbpJbXtHJsjn1/PS5w6xe0MRVZ8w1DzXMc/bmAkovO60bKLu+kDeCFX2rsya9USxC120tph8c8Dy5aGicinApeluETo99M2uJfk/PCHOaLPshny3c5EN9Y6VRLyXWTbH8wf97eDdv/NoTyHDMYYdUq+hzjOYE85sSzGtKsH5ZK/ds8dg3FVggdt/d44LuMYkssW7sxdiIr3VTJ8dYObeBeCTMJ16/GoAPXb0KYZdQtiaxTNS6B8o4ek+mb5mCbDLnsZY8aK2PMjhu5hrYX/y8kSOdD/HK0zsYzlpfUx1Lr3Eqw5sZC5roJwMpJXu6R+hotojeyEA+hwhHGUnnTJvAiYiDqNKDLkV/8MQYg+NZMvlQsKIP8OilkWXMUvQA169dwEvHhguLoYCD6MtZN2mGcmHGZaRQ573UunEsatpjsog+SZrTOhoAuGb1PJ7+26u5bs18x/nNc9Y3tZljV0USOaMH7H4DnkRkwbrxIfpkDCkxrTbrHksjS44I771kGVmmV/1oaEwJXNnemugnjZF0jqFUjtZGk9AwcmBkCUVMoinx6cMx8rm0GQ3jsW66h02iHDNEGY++zlTPisWVXC5LjjDzmyyit4j1/m3Hi40qtG7ymXGGchEyMsL4uHUd3q0KlYq+HYCkGC8QPcC8Jk9ZAovYW+aYVk53/1DpIIyMm7QDrJt8Xop/gskAACAASURBVEI+S54whNRft/XLzEllIE1h3CKfIxaNcuUZHYgKtivU0Jjx8GbGgvboJ4O+UVNBNtZbijufhXyWcMR8bPIS/bhhVrn8ym+3lxB9j0X0w1lHHRY/RQ9KVZ/PZcgSLij6hS11nDm/kcd39xQbVWjdZNNjpIiRIUomPe4+xlkyIK9W9AsSBsl4QN0daxJbMHceAHuPnSht462vH2DdjGcNohjkA2r9rFnUxPL2pOnJG2YkQhiD9uYkkXCIhW22jaStG41TGEbOYd1oj37S6B0xCaEhaRGxYXr09ubU3hDLpw6ZFsroUL954y2il1LSPWyS+nCG8lE3oPTp87ksOVkkeoBXrGxnw/5+UllPnfyyin6MNFEyRArFworWjfXlcS3G2oreVM2LkmWyS61JrK3dVPT7j/crBlG5dTOayRElRz5ghy0hBG84ZyF9KUkmm2ZozPx8OprNJ4/FHSbR51QRQBoapwq0dVNbqBV9jlAkSkdjnN/vOYGRNy2W40Mpnj5ghjrGMhapWUQ/nM6RyuaJhgWDGcd2hFUqemlkyRJmQVOx/eWr2snk8mzY32e+UGF4pcylScsYDckGZEnClKN+u0fRy3gjGRlhYV35xV4AkWgG4HDvQOnidRXWzVjaIEIOWaZ65w3nLCQrwwyOjLP1oHlP5rean0Nnh5m81dWrsJE0NE4VGBm9GFtLnBgxya0pWW++YCl6QhFue9VpPL67l4//ZDP5vOT/PbSbtJW12op705HuIfM8Fy+fQyofJm0raJWit0lfUcFSWvufNtUVye7i5W1Ew4LHd5uZqrZCvu+FQzyzr8/32kI5szxyc2MSYaRJ5wxFwlSkRNGfSIUYJUF7rHz4JgB1JrmOj4/R5c0mdj6CgjtBC+jqHyssNNuKXpbZM3fl3AbqEglGxsbZ1mXek/ltJtEvn2eOZf/xAcB80npyTy+D49qz1ziF4LQ8NdFPHicsRd/c4CB6K1nhfZcv50NXr+LHm7r48A+f5wcbDnJOZwcAbcJd0Mz25686cy45wqTTloK2ydBl3fgrepHPEo/HiyGMQH0swvlLW3nCJnrrg//273by2Xte9L22SD5NvK6ehmSSGDl2d48oFmOdmbHmeA4MGoySoC1aQUIWgKXo42R5aq/Hp8879nOFEkX/0R9v5j3ffoZ8XjKWMT36spujA3NbGjCyaX67pQuAOmujElvZ7+s2if47T+7nXf/5NFd/6RF++myXukichsZMg8u6sT16vRg7YZwYyZCMhYnbe5Tms67Z9C+vWcWtr1zB3S8cISQEV529BIA24d5dyvbnLzttDoaIkrH2PiU3bm3w67h9AR59KJ8rjsWBy1e2s+3IkGk1WQo5So4XugbZ06MofJY3bZBkfQPNjUliZNlxbNhB9NaXJxwtyYzdN2gwKhM0hcoQvT2JWU81zdE8T3ufMJxV+Oz+LKJP5ww2Hezn8MA4z+zvYzSdIypyZghrGSxoaySCwb7uQet6ItZ/1tpK7yCP7+rlM/ds54pV7Sxpq+cjP3qBt9/+FN1DPjkMGhozBdq6qS1OjKaZ0xB3R7I4ZlMhBH9z/Zl89LVn8Jkb19DcYMbbt6FW9Aub66ivS2BkHYo+4vDnIVDRhzFIKPZLvXxVO1LCk3t6Gcmaav/8xQ2EBPz8ucMl7VPjZj35hoYGmpINxMjx0rHhiqybPf05UqKOuPTZHMWGreij9RCOs6w5XGolGd7F2OITxJauQTI5c8H3588dZixjEMEohkgGoD5RRzIiixu5O6OIgOP9w/z5959lZUcD/3HTBfzktsv4/JvX8uyBfr79xL6y59fQOKnQ1k1tcWIkw5yGmDuSxUNOQgj+/KqVvG39ksLr86LWxhwFRZ8mFgnRVBehsb6OfC5rxoXnrAqSTtjEn3UTad7IEyVHXaJU0a9d1ExjIsLju3q5/yXTHnn7+Qt4xcp2fvbc4RJL4nCPuVjc1NhIKBonLrIm0Vtflj0n0nzt4d1mKKPHutl5IouMJRHpMrtMFWypOETiLG4Kc7BvjKODjuvyRt04FL2t/q86o4N7thylbzRDFAPhU/7AhXCEZFQSFoqSDpix9SEB37p5PQ3xCKGQ4B0XLeXshU28cGig/Pk1NE4mnFtwaqKfPE6MZpiTjLmzTZ07FnkRNkl4UYHoTduiZzjN3EbTW29uSBImx/4To5ai9xK9bd24Ff2JEZM46xVEHwmHuOy0OTy2q5dfbO4GYGlzlBvPXURX/zibDrhDGw/3mr+3NDVBJEGYPLuO9Be+LJ//zS6+cP8Onto/WIwQshT9jt4M4URj+X1jc46IokichUnzSePpvQ5VH2DdbNjfx6q5Dfzx5csZTuX41eYjRMkVktUCEYpSF87zH+9cWzyv4/9Vc2L8x00XsKSt3nXYusUtbD08VIik0tCYkXDWiNIJU5PHiZE0c5JxR8iireh9QvwsIukIexV9irmNJkG3NtYTJceWw4OWovezbtxecfeAaQcl6zztLVy+sp3DA+McHbXi240M162ZT100zM889s2xEybRz2lpKlzbwMgIo+Om2n7x2DhXnzmXgwNZ+kfGGM8YBYXeNWwQq2+CjKdqphfO3bPCcVrikrZkjAe2W1m8+bxZN19h3Rh5yab9/Vy0vI3LTmunozHOU3v7iGAUfPZAhKMII8eaeVbpCueaA/AXVy3nkhVzSg47Z0kLI+mcu6SEhsZMQt4AmZ/ZRc2EENcJIXYIIXYLIT6ueP+VQohnhRA5IcRbPO/dLITYZf27uVYD94OUkr5Rr3WTK0TdKGGRZpsYNmvYW6TdPZSmwyL65oZ6ohhsPTyoVvRRdbXH4wMm+TTUl3r0AJevMiN+FrQ1FMaajEe49ux5/Grz0YLfDXC8z7QnksmGwhhj5DjWb5L33JZGvvGeC1i/Yi75XJa3fvNJNu45Si4UBwR1DU3lFX3W2vRcCIjECRlprl8znwe2H2c0nStaQiXWTY7tR4cYTue4aHkb4ZDgjecsNMcochV59IXEq0ICmGdfWp+krHOXmBFCL3QNlu9DQ+NkQLWOBjOH6IUQYeBrwPXAauCdQojVnmYHgVuA73uObQM+BVwMXAR8SgjROvlh+2NoPEcub6rQonXjjropgUWazflBhmUCw3IAuofTzG00CTociREThqXoUy5FnzXybDpsZdt6iL5n0CTWQvKWB51z6nnb+sXc+qozimMFbjxvEYPjWR7e0V1oe6LfIrJIXYH8YmR5fIdZ8viWK04jGg6xcn4rTTHBaNpg64FuRg1TPTQ3t1Zm3diTmFWo7YZzFpLK5k1Vb3hIGAr73dqLthd2thWuASAeylfo0UeLn5X9u7Mvn6SsFe0NNMQj2qfXmLnwipeZRvSYBL1bSrlXSpkBfgC80dlASrlfSrkZ8ObXvxb4rZSyT0rZD/wWuK4G4/ZF76jpkbc3xB0EkXHHsHphEUq9MciIrKN3xExEGhzPFqwbwlEiGGw7PGRWdHQo+u88uZ8//f5W8xePR987GGzdCCH4l7ecw+VnLiyOFbhiZTvtDTF+uOFQoe2JQSv801ooBeiogwM95uuvO2dpYawxYfDwX13JTevnUV+f5Ie3XmISfS4VXE8n67ClLKK/sLONBc0J7n7+iFrRW9bNhv19LG6tY2GLefzZC5tYNbeBuAiYZJ2wo3dUG6mAL9GHQoK1i5p5oUsTvcYMha+inzke/SLgkOP3Luu1SjCZYyeEE1admzkNDkWfz5WGBDphq+PcCCPUc2wwVQitnNsUL7QJYzCSzjA0Mlwgw3xe8r2nD5LGPLeRcUfd9A6ZSr/sYmTIMVbMhdr3XtrJQy91s/WwGbI4PGx50NG6wgLymR1xIpjH2LV8CBXL/UbyGaLxOi5eMQdilvedCfCynYo+HAcjTShk1qJ5dGcPA8PWE0HInTAljRwb9vdxkaXmwZzEPvEHq5nfEKkoYarw+diRS2GPdRNQHmLdkma2Hx0yM4Ut9I1mzHUKDY2TjRKin4Ee/VRDCHGrEGKjEGJjT09P+QMC0Gcp+rZkzLyZwqojX0HUDcAwdRwbShXKE9sevU1sK9vijIwMF8jwiT297Osd5bXnLANg8373zlF9KmJUjqFUtd7yik6aEhG+8uAuuvrHiGMRXSRRUPSXLmtgSbNHJXj3jLWJO2atAwTZNwpFD2Ytmlxe8vCLR6zxxnhmXx/bjw5BOIqRTdM7kuHC5W2u073y9A7a4lSm6O02tv3lvB4I/KM4d3ELWUOy/aj5BDWeMbjuy7/jc/dtL9+vhsZU4xSwbg4DSxy/L7ZeqwQVHSulvF1KuV5Kub6jo6PCU6thV65sb7AJ2rYDAuwDx+vDso7jQ6lCnRvbo7fb3HLJYsil6E2bt+7Opw7Qlozxubeej0GITXuOMZwqknXf8FhxHEFQLDg2JaL8yRUr+O2Lx7l3y1El0b/1nLm856LF7usIR80V/ny+uJk4VK/oHUR/9sImVnQkeehF8+N7eHc/b/vm73n9Vx/j6QND5KwNwC/yEH3hmiq1bgCynntmq5+AevTnLDHr4Wy27Jv/feYg3cNpth3RhdA0ZgAK22nOXKLfAKwSQiwXQsSAdwB3V3j++4FrhRCt1iLstdZrUwbbummtt4jT3m3JCPLoiwuFo7Z1M2ITfdzV5sZ1c6kTGV7syXBsMMUD27t56/rFxCNhiCTIZ1N889G9gBkBNGATvV9opw3neoIDtqr/6kO7iQuL6KIJh52RtiYH4ShT7PgSOYnbrrMfRPTZlFLRCyG44ZyFvGgVHPvZC928bu183nPJMrYdGyebzdDeEGNFe7L0nM4t1IJQYt1Y1yGEe7tHBRY0J2hviPP8oQEyuTy3/878DPb1lll81tCYDhQCDE5OCYQy7ANSypwQ4gOYBB0G7pBSbhNCfBrYKKW8WwhxIfAzoBV4gxDiH6SUZ0sp+4QQn8GcLAA+LaX0L81YA/SNpmlKRIhFrDksFCkuxpaJugEwog0cG0oRCQlCArOUgn0eIBnJEw3l2Hkix92/2UFeSt59kWnbhKMJzmyIcuvjexECzlvaYirdOBUoevXGI7aq/9ff7qQ5br0XqXOXXPBOYoW1iayl6G3rxiLhoOzY3DgkWqzzxF17xt5wzkLufdD0vK9cvYgb33k+oZCgx1hKfLPBWy5Y4ircVkDQJOuE3cYmeuc9C0UD/yiEEJy7pJkXDg3w02e7ODaU4opV7Ty2q5eBsQwt9RVMNBoaUwVvgME0FzWr4K8PpJT3Avd6Xvuk4+cNmLaM6tg7gDsmMcaq0DuaKdo2YCn6tGll+Hr0jtcTjRwbTBELh5jTECccEu42RoaoTJMWMe7a1MWVZ3SwdI6VqRmt44JFdaxNNJulCCSsFUZpHyoIASKsjBW/5RWdfOuxvSyoA8axFH28MJ4SW8oZjphLFTYdKVo3QR59ChptRZ9wRRGt6GjgpgsXwmZ48/pOsO5NR3MjiBwfv/5M9TmdxZyCEPZYNz5lFvywbnELD77Uzb8/tJt1i5t576WdPLarl729o5y/VBO9xklEwbqZoYr+VMOJkbQZcWMjHCvWb/HNjC22DyeaODaUIhEN0+GaMKw22XGEzLNs3hzogpsuXlZsE4mTDOX48W2XMZTK8vTePgZ2puF5KlO0PvZEUyJqpv5veRJewPLorfHk0qULzS7rxqnobesmgOhz4w6PPlYSLvreixbBZkrj6O01AdW+sEHrI04UPHrPYqzdR5lNWc5Z0oKUcHhgnE++YTUrOsyJbV/PKOcvndL0DQ2NYJTkhsw8j/6UQt9oxix/YCMUKV3c88JB9NH6Zo5b4ZWF0ErnsWlzce8VZy7mw9es4qoz5xbbRBKFiJGmRJTXrJ7HW8+bXxxHOdjrCQq8YmU7S5vCpuoPR4tkbGQsayTsOI8jgieXUizGBpRByKaKBds8ir7Qn7MP57X5bYPo3BQ5CAVFr4hU8mxuosK6RWaG7OnzGnjNWfNY0lpPOCSmxaff0zPCbd/dVLJNpYYGoLBuNNFPCidGMrS5FH1UbQU4IUSByBMNLYxmDPb3jhYXYp3Hpkyib21u4sPXnF60dsAk1Kw7M7YkfjYIAXuvAu6F0rBH0ausm4Kit46pxLrJjRfbh2Muj948Z7b4no1yce7eImh+8Hr0VVo3rckYH3nN6fzjjWsJhQSxSIglrXXs7XWvSdy1qYsvP7CTrOG/f+7PnzvMp36xtaJCad3DKW6+4xl+ve0Y335cl0vWUMDXuplBHv2pAiMv6R/L0J70bHNXWNwLuNxwDPJZko3mI/5wOlcMrYQi6aQtNeytR2+/5t14xBs/G4RwLJjMcuNFde4soua1blyLsQpFH7QY61X0RsZtyfiVQHC+50ShCFolHr1tjymewCogeoAPXb3K9fuKjgb29rgnti8/sJOu/nEe39XL1999PnObip9zOmfwmV+9yJ1PHQRgSVs9f3LFCt/+RtI5/vi/N3BiJMN5S1v42XOH+fj1Z5KIhn2P0XgZwmvdhLVHP2EMjGXIS0ekDJg3tJyiB9OPzo7S0Fz0ctXWjUX03nr0YBKqVy0XPuBKrZsgok+71TaorRt7QjM8Hn0obG4o4hdeKaVb0UccfYRsq8hW9CrrRvGlzSva+8EvvBIqsm5UWN6e5Mk9veTzklBIcHRwnK5+s8rnk3tO8LqvPs5fXXs6yXgECdzx+D6ePzTA+1+1gl3HR/jSb3by2rPnF0oj7+kZ4XtPHSQZDzMnGeOB7d1sPzrMt967nngkxLu+9TT3bT3Km85TxiZovFxhK/qTZN3MKqK394ptS3psBZucg1S1RZwtrXMAM+mmwxu9AwWPXq3oEzDm3V/V3uavwvDCQOvGseGJM7yyxLpxeObOpwAws2P9rBvbj3cqerCKuCWK5wSPdROg6A1Fez8UrBt7MbZ6Re/F8vYkqWyeY0MpFrbUsWG/Wer5w9eczseuD/H+727i4z/dUmifjIX5j3efz/VrF3BkYJzX/Ouj/O3PtvA/f3wRz+zr49bvbmI8Y5DL58lL0/X73JvWctWZc8nnJZ1z6vnfZw5potdww/t3o4l+4nDVubHhtG6CFL31AcxpKxK9S9F7rRuVoo8mJmndlFP0njo04CjYprBSbFvHWVI5lvRX9PY2gqqnBhtK6ybAoy8omWoWY23rxn8D8kphR97s7RllYUsdG/f3kYyFOWtBI5FwiF9/+ArXAmpHQ4LmenMcC1vq+OvrzuRTd2/jr+/azC+eP8Litjq+80cXsailjn7rCdIukxEKCd5+4VL++dcvsbt7hJVzG6oer8YsxUkuaja7iN5ZudJGOFpUsOU8eszF2KZEhKGUx6MPVajovUTv9eaCUM6jzzpCH8MRMwInlzb78EaoQPG6K1X0tpJWKXobecX1BNWiUbX3Q8hr3XgmkwlYNyvaTbLd1zvC5ava2bC/n/OXtRIJm2sO8UiYlXMbfY+/6ZJl/OL5w/x4UxcXL2/jm++5oJB85bIILbzlgsV86Tc7+OGGg/zd693VvA/1jXHbncXIHCEE7710Gf/n2jOqvi6NUwxeohfWmtcEvtMTwewi+hGFdROKVL4YCxBvZH5zgqHUSLGgGZRE3fh69N5wRG9YVRDKWTe5tHtnq4iVuZrPuf1s+2d70dWp6OMNxaeSkvN7FH3BHnIqeo/X6OxPad14anwEwT5PdgxXSQe7vwko+nlNcepjYfb2jjKUyvLSsSE+fPXpFR8fDgm++s7z+PXWY7zn0mVmqYsAdDTGufbsedy1qYu/eu0Zhfa7u0e46VtPk8oZvPl809Y52DfGvz+0m+a6aOCCr8YsgPfJXgjr711bN1XjxGgGIRx1bsAkmFwl1k3UnGWj9cxrSnBsMOWOnKgo6iYxufDKstbNONS3O9pbCU1e66ag6G2idyr6JIz5VKEo8egV2yOqPPdA66YK68qp6L33K+yw4KqAEILl7Un29Y7y7IF+pIQLO6tLnlrcGhx548U7L1rKvVuOcePXnuTGcxdy1oIm/vKHzyOE4Ae3XsKZ8809iY285APff5Z/vGc785sT/MG6hVWNS+MUgkrwaKKfGE6MpGmrj7lj28Mev94PkbhZ9EsIXrmqw/1U4DxPOkjRB3n0FWbGBn3w2ZSbtO0niBLrxlb09qTk9OgbYMC5RYDz/F6P3l4HcDylVGvdVDvR2ePwflZlipoFYXl7ks1dg2zc3084JDh3acuEzlMpLl/ZzmfftIYfbTjE5+57CTCLrn3vTy5mRUfRtw+HBP/29nPpHXmaj/zwBdqSMS47rd3vtBqnMrxFzcAieu3RV40TI5lSglZZDCqEYxA3ldafvlKh3krI00fRG2kzTNEu7mV/kJUmDHknCic8WxiaRcesWjcRRRSMUtE3BCzGptztnZE9Nqq1blQ7UvnBGUfvnRgnoX5WtCe5d8tRntjTy5qFTdTHpvZrL4Tg3Rcv490XL2N/7ygP7+jm2rPns6il9DuTiIb5z/eu5y3f+D23/NcG/u1t5/L6dQumdHwaJwEqwRcK68zYiaCwKbgTKuWpQjhaLOPr9z6Uj6MHDzFWGUdeadQNFGvRlFg3Vl+FxdgKo25sRR/1evSq61E8KanWF7wZgUFwZsZ679cEo27ATJrKS3ju4ADrOxX18qcQne1J/ugVy5Ukb6OlPsaP338p6xY18+fff5ZvProHKUszcr//9EHe/PUn+Px9L/HYrh7l7lnHh1J8w+d4jZMI1d/BNFo3s4roe0fTpZEQqrBDFVZeA2e8zv99+wOyF2MjPtYNFNcEoLrwynJJQc6oG7u/QsKUokxxWqHo4w3m6yoiKCh6Ray+93q8ETHg49HbeQRVWDe52ls3Nqr156cLrckYd/7Jxbx+3QI+d99LfPmBXa73pZR849E97O4e4VuP7eU9336G67/yO1JZN9l/5cFdfP6+l9jTo+vwzyioou800U8MJ0YyzCnx1hXetQqXfRCu/oT/+67MWKFWqLbKdyngasIrK1D0zieJwmKsoX5yyag8+qRZksAbHQSlil7l0RuKBLCCdaPy6KuIugmalMvUow9Cp4PoL1g2vYq+GiSiYf79Hedx/Zr5fPvxfS7Fvu3IEAf7xvjb153FC5+6ls++aQ37T4xxz+ajhTaj6Zy5gTtwqF8XV5tR8G4OBJroJ4KskWdwPOuuXAnqDM6JoBCyOGQSoWqDDWXceTWLsQFEL6Vl3XjCK3Mpy7rxeH+gDq8MKlVcouhVE1fG7Mt5/UHWTVUefcCkPAnrprkuSntDjOXtSXfI7AxEKCS4+bJORtI57t9W3H/4vq1HCYcE1549n2Q8wrsuWsppHUm+8/v9BZvmV5uPMJI2iUNX0ZxhUO3JEApP22LsrCH6/lFFViyoww4ngsKHJNW2DfhYHTkzsUk1MXgRZN14Qx/tMQVZN37hlaAuVVzi0TsqZBauR7EtYCXhlRV59Ip1hkIf5evRB+FdFy/jlss6J3z8dOKizjYWt9bxk2e7ANO2uXfLMS5Z0VYINhBCcMtlnWzuGuS5Q2Ym9/efOcSquQ0koiEOntBEP6NgKPZk0Iq+erQ3xHnmb6/mhnM9schhBQFOBE4SivosrNkTgDPe26hwY2wgqB59MZnJ6dHHg60bW9E7xxtUwdJX0Tvj6HMK/zxafM8Lo8onGtXPMCnrBuAjrzmdm08Rog+FBG8+fzGP7+7l6OA4O44Ps693lNetdUfjvPn8xTTGI3znyf28eGSIFw4N8M6LlrK0rZ6DWtHPLNhPwk5ooq8eoZBgblOCpoSCIAo/TyKsLhQGLFXuq+gVVoe3hHAQglRr1kPCUFT0XusmSNE3WmQx2OXfh7fmvXNM+WxpREzQxiOqImh+mEJFf6rhD89fhJTws+cOc++WY4QEXLt6vqtNMh7hLesXc++Wo/z7Q7uIRUK8+fxFLGnVRD/joHoS1kRfQwSpxGogRPH4corem0laSWgllLFuPCRs96faHLwQXqnw6OeeZf5/fKuij/HiDla+16PwGiuqXlnJYmzI7F/VfhIe/amIZXOSXNjZyl2burh3y1EuWt6mXF9476WdZA3JfVuP8bo182mpj7GkrZ5DfWM6xHImQWndaI++dqg0jr4ShDwE6IXfYmxVit7PuvEkM9k/24peNaGpwisTTdCyDI5vK+0j603Isj16Z60blXVjK/9JEr2znbIPOW1/GDMBf3j+Yvb2jLK7e6TEtrGxvD3JlWd0AGbpBYClbfWMZgz6Rl8+T0AzHqrtNLWiryFcIXuTzIgsp+ijKqLPVW4ZBVo3nvIE4A6vVNkeqhIIAPPW+Ct6Z9tQyOrDM3FVY91UU6bY2U7lZzrP9zLA69YtIB4JIQRcd/Z833Z/c/1Z/MXVq7houRk6utTaJEXbNzMIKsGna93UELVU9F5LwwtlOGKueuvGWULBhirqplDrxrvDlCPxSIRKSXPe2bDzPmsjE8fE4VX0UCyzULieTMBi7CTDK6F4r1SZsXYffhPtLENTIspNlyyjezjt2u7QizPmN3LG/GJW99I5RaI/b+nMTBB72UEVlKGJvoaoNDO2mnOpyh+AutpjtdYNWFE0no/GW0IYKGze7bVuQiGT4GXenHy8k8a8s833el6Chee5+/BOYnasvg0jFxBeWQPrJhRk3TBtfxgzBZ/4g9XlG3mwpNUk+q7+6qt9akwRfIlee/S1gXff0Umdy1b05cIrvYux1RK9gjCzPh59Lm2SdsljYbS0vY35a83/vT59NlU6iUXibo++auumihIQULwHqj8KeFlZNxNFXSxMR2Ncx9LPJCitG13UrHawlaAImUp3Uucqp+j9PPoq1ayKzHKeZCawSNyKrPCzOlQ2U2unuUm4l+idG4M7+/BGEXmvx95EIXDjkQrCK6FI6KrwSrt/jbJY0lqnPfqZhJNs3cx+ovezAiZzrnKK3lvtMRS8K1EBQYlH9jldcfQOVC0rEwAAIABJREFUtV6yeGn1qVL0obAZZuldkFUp+nDcU+tGEQ8M5r1RTVDVbCXobFdC9AHZtxol0ElTMwya6KcYhcW9GhB9OUVf2MfVWb1SET/rhyALJOuTGVs41s+68RnrvLPh2FZ3FUtfRe8tgaBY2vHbNEVVGycINqH7WTcvM49+oljaVs/RwXEyufzJHooGBETdaI++NvAL15sIynn0UExislFVZmyAai0kTCVK2zvHVjJWnyJe89bAeB+MHC++5uvRe59QFNcT9rNuqliMBod1U0WsvkYJlrTVk5dwZMAUCIf6xnjT15/g/d/dyL/+Zgf3bjlaUuK4lrj7hSN88H+fI2voiQYIKGqmo25qA7/FvQmdy/qg/BS9/Z7X045U6E8H+dCFhCmvR2/Baw9VoujBtG8a5xf7KKfo/RaX/bJ6/awePxQ+Lz+PXls3lcAZS9/ZnuS/n9zPlq5Bls6p57cvHicvzY3TP3T1Kt62fgnRcFHz5fOSF48O8ezBfi5dMYdV8wI25PHB9546wNP7+ljaVsdHX3tm2faprMHPnjvM29YvcW8FOlugCrPW4ZU1hF+m5URgq82yit4bXpn0b686v+rDV0XdBO2Ha3+p/BT9XCts7/g2c9MVKK13D6ZHn3ZUuvSGcjrH4hdHX02imt+aStC+tBolcMbSp7IGd23q4rVr5vO1d51PKmuwYX8fX35gF3/3s61849E9rJprknnWyLPl8CADY+ZnWR8L87V3nc9VZ85V9vOTTV3k8nnefuHSwmuprMFzhwZoiEf4+iN7uHxlB5eeNidwvD9/7jB/89MtLGhOcOUZ6r5OaZzkhKmXj3Uz2axYKO/Rg0ms3vDKijNjA+wJO8bd6XW7FmZ9PG0/RV/fBk2L3JE32QoVfVXWjeKRNQh+T2A66qYqzGtMEAuHONQ3xi9fOMLgeJabLl4GmBucXLGqg7tuu5Q7blnP0rZ6eobT9AynGRzPcs1Z8/i3t5/DPR+6nOXtSd73nQ3c+dSBkj6GUlk++Yut/NO9L5FzWDTPHRwgk8vzuTevZfmcJH/5w+cZGAt+EnvwpW4AtnQN1vAuzCAorRu9OXjtUEtFb39QgYq+zqPojcptoyB7IpsqJe1IUNRNGY8eTPvGSfS58fIevZ+iD7JuJuTRe6wobd1UhVBIsLjNDLF8al8fK+c2cMkK9+5aQghefeY8Xn3mPN/z/Oj9l/KB7z/L//35VsYyOW595WnF9zYcYjRjAAYbD/RzyQpTtf9+7wlCAl51RgfL25O86etP8Dc/3cJ/3HSBso9U1uCJ3b0AbD48W4leZd3oOPraoZaLsfY5yil6LzFW2neQPZFTlSfwbDTseq8Cm2ne2dCzw0yIyhsmiZYo+kRlHr1fdcn0sLlPbaXwm5i1dVM1lrTW88TuXl44NMBNFy9FVBr55EAyHuE/37uea1fP44u/2cmBE+bOZDkjz389sZ9zFjcTC4d44MXiov5Te0+wZlEzTYkoaxY184GrVnHf1mPs7VFvSv/0vj7GMgZzG+OzW9HrWjdTiKkIr6zGo68qM9bO/vRZjPWqc5dfX0VmrI15a8yJ6MizxWxZb3u7zIINX+vGj+iHINHsPwYvQmWsm8e/DJt/5H+8CMElt7lLOwC88APY/aD6mBWvgvNuqnyMNsb64IG/d+/Mdc3fm7aYH373RXNyLYfVb4Sz/qD6MQ0dhee+C6/8KEvb6nl0Zw910TBvXtMMv/ywegvJcAxe9dfQusz9+oZvw+ILiSxYx2duXMPVX3qUT929jf+66AibjuQ4PFDHJ9+wmu89fZAHth/n715/FulcnucPDvDxc8Zh03fggpt524WL+bcHdnLP5qN88II4bPkxXP6Rgg358EvdJKIhbr6sky/cv4Pu4RRzGxViSkp46DMwcMj8XYTgsg8Uv7s2nrsT9j7quJc3wFlvqP5eDhyCRz5f3VNkOAqv/CtoW+F+/STXo38ZEL11c2sSXllB1E0kXqwDD7ULr8wqYtwDFX2ZqBuAziugrg2+9za4/vPma96nBqeiN7KQGoC6ltJzRercO2vZSA1Cg3/lxRLYk533nrV2muQ9dNj854eBA+b4vET/2Jdg6AgkO9yvj/bCoacnRvQHnoBnvwNNi83fh7pg1bX+BG1kTaKqa4WE4h7aGD5mbgwzEaLffjc8/FlY97ZC5M2N5y2kqedZ2PRf0LjQPZnLvHnPFqyDi9/veF3CfR+DC26B13+ReU0JPnzNKv7xnu2M9H+G+HgjS9s+xTVnzaN7KMUnfrGNPT2jdA+nyBh5rkvdA/f/Gi64mQXNdVzY2cqvNh/lg4nn4MFPw7nvhsb5SCl58KXjvOK0di7sNCfIrYcHefWZiu/taK/5OdbPgXgT9O+Hho5Sov/dF8y2yQ7zXg4cnBjR7/w1PH8ntCwt7pNQDv37zDLgV36s+FpmDFJD5ufuxEzz6IUQ1wFfAcLAt6SUn/e8Hwf+B7gAOAG8XUq5XwjRCWwHbAnzlJTyttoMvUL4KcTJnCtI0UfrYKy3+Hu1G49AgHUT5NH7LcYGKPrGeXDrI/DDm+Dnf2a19/YRKxJ9/35zbO2nl54r0azetSo1BO1n+I/Bi0LClOee1bWYYy2HL681J5eScQzCmj+EG77qfv3ejwY/IQTB7ueP7zMJ8yvnqPv2tr/yb+HiW/3b/eDd0LdvcmNKDbJm0WKiYcF7LumEvl3m6+/5Gcx1hDsaOfjMnNJxZ8dMFep4/ZbLOrlrUxfjAycgn+ePruwkHBJcfdY8PvGLbTy4/TijGYOQgI5o2hQ8ljf9B+sW8qm7t9F3ooc2e5yN89ndPcKhvnFue9VpnL2wCSFgc9eget3AHst1n4d1b4MvnlF4zd5kRQhhvnbOO+H1XzS/2727J3gvzb14+cDG4L8jJ756XmnGec92QBZDmm3MJI9eCBEGvgZcD6wG3imE8JbUex/QL6VcCfwb8M+O9/ZIKc+1/k0vyYO/QpzQuSqMupmoRx9k3aSGIOoJ03RF3fgUGgtS9GA+rr/vN7DuHebvXtURSZjWjZRFy6F9Vel56lr8CTbRFDwG17gnuaaSaA4Yh8JCSjSb9lJ+Aok9dj+J5uK5KyH6claW3zVUM6bUIJeeNofnP3ktqxc2+fcdjkCsobQ/x3lsRMIhPnPjGhrkGC1inLeuXwLAwpY6Vi9o4oHtxwv+fDQzZB6UNv+/fs18hICDR466zvuQFW3z6jPnkoxHWNnRwFa/BVnvNVj3aefxYa7+10f594d2m99T52c92XsZqauc5KE0wAGKv5cQ/cwKr7wI2C2l3CulzAA/AN7oafNG4DvWz3cBV4uJrPxMBaYivLKcR5+dYFGzQileD9HnDfPLMm+1uj1MzLqxEa2DN33DVMxnvE7dh5GB3p3mz3MURK/6g5LS/EOPV0H0k52YE4oJJ5syn4j8iF7m3XZbpUgNAgJijcVrDCT6gWKfQZgUOQ24xpGMR9zj8rsH9nGF85QSPcCFixuoF2nmx9M0xIvfuWtWz2PTgX6eO2hF3xSON887tynBxcvb6O3tdp33wZe6OWtBEwuazb+ptYua2ey3IOu9f4lmBvp6+cOvP8nenlG+/fg+UqOD5udZaOMjQCqBnzgIwrw10LfXvRZyfJsp0lqXu9vOMKJfBBxy/N5lvaZsI6XMAYOAnSGxXAjxnBDiUSHEFaoOhBC3CiE2CiE29vT0VHUBZVHThKlKFb23fnu11Ss9RN+zA7KjsMgTnlZRrZsK1YgQpq/tnRCdFTl7d5ker0qhq5Rxdtz8Ik9oMbaGit5Slb4kBxMjA/tpJRQyH8PjTWWIvgpFnxn231ay3Jic/ztfD0XVm7ao7pnfeax7mcgNu+okXXPWXPISsoY0wzgVx79+3UJC9meRGmRwLMumA/1c7UjGWru4me7hNMeHHH9D3jElmjHykiPpGAePHGVhSx1feMs6BsezPLp5d/Ga7P+zoyV/U//5u71c+YWHufFrT/An39nI5+7dzr5ez0L1hIj+bEBC90vF12yR5q2eG4qak9JEniarxFSHVx4FlkopzwM+AnxfCFHCElLK26WU66WU6zs6OkpOMin4Fcma0LkqUMmRutpbN4c3mf97id5V68YvvLICRR+EwmYqGejdobZtwPqDkEVSBccfZjWKfpITcxBpqRZAJ030DiIop8SrIXpw38tqxuT83/l6olldXK4aord/z2ddi+9rFjYzrylOSMD6TjXRX79mPk3CrKjZdfQot925CSMvefVZRaJft9i8dqWqt871/RcGufKLD7PhWJ65sRQ//rNL+cPzF7NsTj2/fXZn8Zqc/6eK9/KJ3b38033baa6P0ZiI0NU/xh1P7OPVX3qEP/7vDTyzr899z6qBo7TIwRNjjKdzpmfvtW2gmCsyDaq+EgY6DCxx/L7Yek3VpksIEQGagRPSXCFJA0gpNwkh9gCnAxsnO/CK4VfffCKoiOgV9dsrDq/0sW4ObzLVYttp7tcnmzBVCZy7ZvXugnVvV7dzEqYdlWMTVTXWjX0dE52YA4l+KhT9FBJ9ajA4VDOoDz+i9+tv+GiF5xlwt4mZkT2hkOC9l3ay6/gwTfGI8vj2hjipWBpy8P1Ht/BS/Az+/g2rOW9JcQJevaCZkIAthwd5zWr3guzo0AmSwGcePMzazoWcO38Z847tQCTM78rbL1zCw/c/C3EURD8AyTn0jWb4yI+eZ0V7kv/904upj5nft+6hFHc+fZDvP32Ad9z+e375wcs5OzUI9e3qe+aHlk6INZA6vJnX/Gwu69tSfG+837R0MOsI3b/tGELA1YSJgkX0VWSPTwCVKPoNwCohxHIhRAx4B3C3p83dwM3Wz28BHpJSSiFEh7WYixBiBbAK2FuboVeIWhY1a1pohnYF7VlqL17m81bolKw+YcobXnnkWdNW8T76hSuJupmkorf7GDhoEneHTwSNijBtFRUUSljSXw0WY9ND7rA1m5xUYaGTIfrxAfe1JVpKvW5ve79xuMZkvR90rnJ9jCs8d79+E83q9lBqe7g+X/c9+/OrVvLld5xn+tPSULZpj5iK/urlMR772Ku55RXLXYlcdbEwq+Y2sqWr9Npf2HWAjAzznVuv5Ee3XcqyRQsRqcGChfSWCxbTFrLsF/taHfdSSslf37WZ/tEsX33neQWSB3MN4SOvOZ0HP3IlzXVRPv3LF5HjxVDiAydG+eu7XuDB7cfJ5x2lvb0IhWDuakYOvEA6l6eubzsA+8LL2HZkkLd840n+7HvPctudz/JvD5pU+NjOo64SElOBsn9NUsqcEOIDwP2Y4ZV3SCm3CSE+DWyUUt4NfBv4rhBiN9CHORkAvBL4tBAiC+SB26SUfVNxIb6o5cYj598Ma94SvJGIrYCNtJnQAVVYN4qNR7Ljpsd32YdK24dCxdIDJQlGFYRXVgL7+GNbzP8DrRvURDCtUTf2H7ZDDY97FvH82leL1CC0ORbYEs1mTHpQ+1DE3N0rCJN9ylAdOz4QoOgVC5bjHuWebFe/HjQGb3sgkTMXvS+YG4K4+jNeu7iZR3Z0I6UsTAInRtIcPHyUtdFGLrJKLZBoNtVwZhTiDcxtTHDJoih0QzrSSNxuY43pf35/gAe2H+cTf7Casxeq70VzfZT/c+0Z/N+fbyXb1E8s0cxQKssf//cG9vSM8qONXXTOqefmyzq58dxFtCYVSnze2dQ9dxdt9VE+u17AM/C2nw9xIvc4rfUxvvjWc5jXFOfEg0/BMfjAnRsJJ/fyurXzueGcRVy0vMqnuApQ0V+TlPJe4F7Pa590/JwC3qo47ifATyY5xsnBJuWaxNGHy5OWrfZzqepj+FUbjxzbYn6Zvf68jUgcMopdrMqVKa4UJUSviKEH9yOyjbT1B19V1M0k11RUtkdF1s0E1HNq0KPoK7Bu/Hxy5ZiqJPp8vmiXqaybliWlx9j92Qvp9lOj16Kxid41kfvcM++xNnLp4qY8Ade2bnEzd23q4thQqhCNc/tje1kjR4g3OMJ/nffJKrNxxRKT6B/an+b6ucU2W/cc4tOPpHj1mXP5o8s6ffsGeMeFS7jz9/sJDQ6RjTbyof99jgMnxrjzfRfTN5bhv57Yxz/88kU+e892rljVzo3nLeIN6xYSssor5+eeTTL/X9ywEuaN78FoXMwZzUtY3p7kr649g+Z667vdvxTuhS+/dQ137Uhz16YuNncNcvcHLg8c30Qw+zNjhTDJoxYefSWwiTGbApurqs6MdRB9YSH2/OBjSsoU19ijP7bZDCNsXKBup1LGqYBoFz9MOrwy6MlCMY5KwiL9MBGPvpJ7MVGiz4yYURyqY8t59HaIaUJxP/yIuxJFr/o+BB0LXLDMJPOP/ngzX33neUgp+Z8nD/DTJoNY0ofom81AwBUN5tPw39x7gEyshTcuN9v86PGtnLXgBr76zvMKhOyHSDjE31/XSeSHeW7f1M8jgz189k1ruHyVOdndcM5Cth0Z5O4XjvCrF47yFz94nsHxLO+9tBOAPaFOVgGvbe+FvdsIL1jDne+6uLQji5OuWtXGVRcsYDSd4+igItqoBpj9Rc3AJI1aKPpK4AxHtC2YqqtXOon+WZNcmxb69BdX91ErRW979D0vmbaNnxqttXUzmfBK1TjCMfW9CEfMCaxaUjVyZgikl+i96wNOTDXRB5FwOaIPOr6SnysZRyXHAmcvbOZf/nAdz+zv4w3//jif+MVW0jmD5Q250vvtOVcoPUQ+mmTF3Gb+4gfP85d3mxnG82Ip7rjlQlfsfxAuWWi22zsS4b2X/v/2zj9IjqO649+3e3e7p9Np9/TLsqyfloQkGxvLOUe2cRBIDpFA4FTKBQYnoRIDJoUxJHFRdqWcAH+kiqpUSCgIFRd2QogLYowrCJftkMhOSEhsIkPK2AiM5J+SJSzZujvJup+6zh89vdvb2z3TszuzP2bfp0p1u7M9M6+7Nd/pef3m9VrcuL02D9DFK0u4Y89W/Oen34HRtSO46/vPVfzs3zspXUuX5Z6X757YIm6AuvUnhgp92Lg8RgLAGPSG0C/f6nY5JI2+QLhywfguDp7LA6Ba183RJ91uG8CdyydscfA4qPqcmwlvw8IiAFR7AU9PyBwhUT5pnSQmY4F6UQlzmTTygpItNj8qLNJX6AcWyvmdRoXevHHNTsk5o7hCPzAcsd3lunHY4dpu4X1XrMa3P3Y1AOChnxzHe9+yEsVzZyKFHlPjyA2Wcd/NV+G2d74J3z04jjnk8IFLS/ZEaS6CY+4Z3Yw795qJAKrkcoSbd2zAkVOTeOjp4wCA7x0+i1dzyzH47HekiHsKfZr0htB/ZH9twqY0qRnRK6GP8TShr9Q0eQp4/bDbbQNUhdz1ZmxYhJAP+jKIrolYQPp2zReGfH3SNcdJyXUTJrCNCL3NHRQ1EvcVeltbxrFpZK2/60rfbu6jslma2xcuk++LRI3o6+wYs293cMmqEh78xDW4dedG3L5nq8VVZnMXyknnvnwOt+zchEc+tQNULGFx3pJwL4zgmDsu3VizzKKNXVuWY8OyIfztfxzGyTPTeOroOM6UN8v3ToBKaGUdFaFPP7FZbwh9KwniinH40eqdOo7bSE/3+8qP5d+wEX2k6yahET3gDq1UmII5NRHPbQM0Hw5rm1ztNqFv1qbymto3ayu2hoRXAvVtVl5Tu7/6XCyF26e2l1bbhb68Rm4XIWGKASNDA/ijd27GilLRPifisi9g4/KFyLvyMIURdXPUyOUIN79tA555ZQJ//tBBCAEsXHOZ/DFfqH//pbJj616YYqFPmjVXyzVY938WeOg2uS2OGyLXV3XdqInY8y9zl8+7RvRJxdHrI/oI95d58cfNcwM0H15pc3uY0TEmtlwvUdjy1qjYbTMmXd/H952CwbL7OFE2KYE2I3Aihd5os+HzpeutEaHvHwKGltTvq+ybn5UZMn1R+YoGjSinOrstbdxMW3r213XbVmL5cAEP/Ogoli4sYOmG4Cl8+Rb3fBO7brqYvgHgg/cBv3abHNUD8Uf0L/wAeOQOmT53yabwF2wqrpuUJmPV/pSvT8pkYr54E2cEq2h2RB/mQnLRihF9WGK1pG2qjMRrE5x5u25UBsjBsuUpzUfog5h9Mz6/zr4Y9bPVId8vbyhRT29N9a+f0Bf68vj9a+T18fbNy5BbEbhrXG4bgIW+68nlgV13Au+/Vwq1Lduji9XbgfGX5So5p48Db/6t8PL5ATmCNd+aXblNPl3EHVGbKB/94gtr/fU2zEfkqZirSwFyEYkVl8jH/kapsyPkZSFbeR9U+agRpiIssZqNRIQ++B6VNdO0e+aMfLO1WLbcvMc8hH68KvT6m7VT43IAMryi9nxx6mYKr/k0lrjQ+18/H9y+BlesG8H7RlcDSzbI62/Lu907tNBHn/04+naydW/8VYJuuDde+b6C3c1x4Q75r1nUiN4nasnmuokr9Ms2Ax/7r3j7hNlh5id3ljdeGIoi7og+5gixYXEaGJZpOvRzRgm9mXlTr1vdTTNwg81OAq85FvRQqQP09hhaqj0lNPA2suupRG+n+Xn74KLRtuwfivVkuajYj28FkUIA5II0YbCPnvEmP5BMegfn8Qvy3/Kt0WVtj/nNPlE0gm7H3JQMDY0SejPzZhRT4/JJakCLex4YRl2IqV6+ci4PGsmjrrtV9HP6nFtvM728vl13P3mN6C12qJG+vt23brY66HbMnAYgEhL6iKfAJGDXDeNNXzGZRVVc5HLA7z0MvNWSa8ekWKpGe8zPA9On40fdJIFLtMLK62V9UKKlh47mcrK+VqH3XHREt8mSR93LJpvA5gvh6yj4CL3uflLbbZEzdXaMObbHaW9H+/n0dbEkUy/o6cMjz9fA/FJcWOgZb/pakN5h1a/4/adXZaYn3KOrVqD7ldMWetuxEhnRK5tiPmXoQjppCGzU+WxtZhXSwC0jztWupOSyQ+03OdaE0HuM6F3J6ypPEA20ZZqw0DPevGkPsO23222FRL+A1cXXFtdNuV6cwiKXGhEeVzZIV6pi3xTF+nEA+7GibDJDTJVvPPR8HiN6c7u+TaESq4W6bhZV7fXFFe446NHXjbalb181Cr8wxXizdS/w659rtxUS/VG9ktCsTa4b5fbwmQTt6BF9HDHU3EmmQPuM6F0jd+X20N0nrjZTidXChL6vELxZG7NuNveT7kIKG/XbbI06X+ojep6MZboRfZItbjhhonZobo9Oct24EqslaVNlwY0khF6fODXa0mWfGbGjb9PtiBvSGtbeKvNmpNA3cNNME3bdMF1Jx7hu9CcLj0nQRIXeIWC2ydsw4tqku0zU/nGFXuWknxqX7p98n71PfYW+f4EUs6nx+sRqcSNhwoTeZp+rjA9mW6ZFC4We4+iZ5NAvKJWaoS0jem0kqfzAYTecQgnOsEgXU+N2d1DYiD5OW8QVp+kJ1Ex+m5OUkUJfRiXEVC+v3zT1yU6VviBM6JULaXKsXoSTFnr9HGZfx21L3f2UJuyjZ7oSn9FVO+zoK4aHFlbSJng+2p+blXMALqGfOVO7HKSyJU2hrxPScq3v2mdEr46jx5DrE5nK/dQ/6J7gNCdNlaCbcyVpjegLi+rTgjfblmnBPnqmK9GjPRpZRjApalw3ngIbR3jCVs5S28yXr+IK/cBQfUKxUJtsI+Yx+Qbr/GwMoTfazBTSykjdsTKXa+TuugH44iX0jieX/kH5UmHHCT376JluRE8oNjUhR9JR+XHSwCZOPvt4C0GI39818RdX6M3ImUibXALrKVquNnNtryQU8xX6lF03YX3dbFumBQs907XoPtl2uG2UDYB28XvEQycl9K5UxXFSFOvH8o01N20qlqUf/Y0T1e9hxBV69ZvthgZUn+SihN4jJz2EcMe16/MxYX3dUFu2Ko6ehZ7pNlTYXCO56JNCd3ukMqIPGfHZ/MG+fvJEbNJcI4DMhOqy1TyXOo4umLrbwyr0lhH9wHA1LYeaK7DdiMQ5OZ8RRZj7SV/cPayNO3JEr3z0PBnLdBuVEVwDq0slhf6o3glC75NYLWmb1N+xl4LvniP6yVO1oYVhbekSelsZl30+9Qtrb31x964Teh7RM91KXIHtFDvSFPpGhSO2TVTrMgE0oY84t1rcfeKV+tDCZoV+bhI4c6L2zdakhD7MPlsZH0z3U1qw0DNdi7qg2um6UXZMjrkjMWzlpyf8HqM7VegLi6r59NW5Tr3od241kW4r72pLX6EH5A3Htj0poT/7WvhLTnHbUnc/pQULPdO1VHyyLXizMIzBMnD6mLyIfOxQE30+OemnxuVFOjBU/5trzVog/uReXHGyCqwSbo+b7mBJK28c68wv691PVqE3bwblqh1NC72j/Yql6LmIZtoyLfiFKaZrKZbky0STr7fPR6/s8HVb6GV8IjOUENjSGdhC+ZoZ0fvmUTfFSd24xl6SCcTU2sJR57O12WDZ7utXE+/z89Vtk+P25RXHXvJfdtHEZ0Qf1dfFkkzBMDvld76WCH0OAPGInulC1AVybiZILdBGO+IkVosrPGHHTEzoY+RRd43o4+RsKZbtbeZqy2KpmlAsrh1xVpnyWfM2qq+T7N8kyfXJiKK0T5P6GZjeomgZtbXFDsvo1qe8jxBE5Y4xc9JPnvK3wzwOUB+r7rJJP75KKBbnvK42swm0vl21mS0ZmPM4cZ6gIoR+sGz/rNNMW6ZJro9H9EwXUnMxt9l1Y/scVT7NEX3cyelmbFIuJP04vueL+1nZZyZWC9s33yfnM3zrFuZ+8unrWE8QLRzR5/vZR890IfoF0taom7L9s7N8ykIflVgt1KYY8wa2/RsRer3vfIXe5qIKE2HfCVKf9nadw2VrM+dLklyeR/RMFxJ3JN0pdqQt9I20ha9N5+bkGr1JCb2ZAdLljvMR+r6izHhps6NYavwmZrPbdg6XrS5alYtewa4bpivpRNeNz5PFwDB3KVC1AAAIDklEQVS8c9J3mtC7JiIbFXrXcVyfw4Q+zIWU+Iiegn4MKRN1Y7G5n9KEhZ7pSjrGdRPY0b/AL4NmLidvTFHCMzctQx6jJmNnzwJzM/J72kLviupJWujNNVtNv3dcO5IW+qL2wpirTKNtmRa5PvbRM12ISigGtNl1YyT38t0nUggmqmWdx9FCCoHGhd43j3piQu9oM9dxCkZO+rYLfUiZ/qK8UXWc0LOPnulGiKqhaQXHY3QrqFz8McLkfHzGPilszVTFjaQoBqptGRWC6LKpItwxwytdxzFDDisJxbR6htoxUr89iXBH33o205Zp0UmuGyLaTUQ/J6JDRHS75fcCEf1T8PsTRLRO++2OYPvPieg3kjOd6ViKJSkA5pJurbZB/+u7TxIjPpvvutERYjM2Je26sR1Ht89MrOZz3KmJ2jdrTXxSPPvWM6n+TZJOEXoiygP4MoA9AC4C8AEiusgodhOAU0KIjQC+AODzwb4XAbgBwMUAdgP4m+B4TJYpltrrtgGqbo/EhT7i5R39t6mxxnPRx7IpZaFXbg8foS9Y/OShNxAhI4ZczLwh89aH1UFl3uxaoU/fR++Tnu1XARwSQjwHAET0TQDXAfipVuY6AJ8JPt8P4EtERMH2bwohpgE8T0SHguP9TzLmMx1JseSXnyVNVLRHnMifYhk4+Szw5e3uMtOBKIUdV4nEvk/Il4Lm5+LZYR7rxf8Ot+ns63abKi4Nz3Prk5q232yT68UScPgxad/pY+59rfYF2+96h3xxyIYa7YZN7KvMmz5C/8IPwttSvcXcqoixXB547t+rNp13MXD9PYmfxkfoLwDwsvb9CACzpSplhBBzRDQOYEmw/XFj3wvMExDRRwF8FADWrFnjazvTqVx1i18WyLTZ9afA0k3+5bfdGORtiVjebsFuYEnIcZdsAkZvAs6elN9XXAJs2etvh84VH/Gb6xhZXy+GG3cBV98KrLjU71yFYdlmW95T/9uuO4HFG+q3b78ZeOYB+XnZZmD9jvoyl74fWLC4/s3WDTvlb3MRicZWXg5svDa8zLV/Jts5jCs+bM84ajKyrnU++u1/ADz7cPV7eW0qpyERsWYjEV0PYLcQ4sPB998BsF0IcYtW5umgzJHg+2HIm8FnADwuhPjHYPvdAB4WQtzvOt/o6Kg4cOBAU5ViGIbpNYjoSSHEqO03n8nYowBWa99XBdusZYioD0AJwGue+zIMwzAp4iP0/wtgExGtJ6IByMnVfUaZfQA+FHy+HsCjQj4q7ANwQxCVsx7AJgA/TMZ0hmEYxodIH33gc78FwL8AyAO4RwjxDBF9DsABIcQ+AHcD+How2fo65M0AQbn7ICdu5wB8XAiR/hQzwzAMUyHSR99q2EfPMAwTn2Z99AzDMEwXw0LPMAyTcVjoGYZhMg4LPcMwTMbpuMlYIjoB4MUmDrEUwMmEzOkWerHOQG/WuxfrDPRmvePWea0QYpnth44T+mYhogOumees0ot1Bnqz3r1YZ6A3651kndl1wzAMk3FY6BmGYTJOFoX+rnYb0AZ6sc5Ab9a7F+sM9Ga9E6tz5nz0DMMwTC1ZHNEzDMMwGiz0DMMwGSczQh+1gHlWIKLVRPQYEf2UiJ4hok8G2xcT0b8S0S+CvyPttjVpiChPRD8mogeD7+uDxegPBYvTD7TbxqQhojIR3U9EPyOig0R0Vdb7moj+MPi//TQRfYOIilnsayK6h4heDRZuUtusfUuSLwb1f4qILo9zrkwIvecC5llhDsAfCyEuAnAlgI8Hdb0dwH4hxCYA+4PvWeOTAA5q3z8P4AvBovSnIBepzxp/DeARIcQWAG+BrH9m+5qILgBwK4BRIcSbIVOj34Bs9vXfA9htbHP17R7I9Tw2QS67+pU4J8qE0ENbwFwIMQNALWCeOYQQx4QQPwo+n4a88C+ArO/XgmJfA/Cb7bEwHYhoFYB3A/hq8J0A7IRcjB7IZp1LAN4Gud4DhBAzQogxZLyvIdfJGAxWq1sA4Bgy2NdCiO9Drt+h4+rb6wD8g5A8DqBMROf7nisrQm9bwLxuEfKsQUTrAGwD8ASA84QQx4KfjgM4r01mpcVfAfg0gPng+xIAY0KIueB7Fvt8PYATAP4ucFl9lYiGkOG+FkIcBfAXAF6CFPhxAE8i+32tcPVtUxqXFaHvOYhoIYBvA/iUEGJC/y1YxjEzcbNEtBfAq0KIJ9ttS4vpA3A5gK8IIbYBeAOGmyaDfT0COXpdD2AlgCHUuzd6giT7NitC31OLkBNRP6TI3yuEeCDY/Ev1KBf8fbVd9qXAWwG8l4hegHTL7YT0XZeDx3sgm31+BMARIcQTwff7IYU/y319LYDnhRAnhBCzAB6A7P+s97XC1bdNaVxWhN5nAfNMEPim7wZwUAjxl9pP+gLtHwLwnVbblhZCiDuEEKuEEOsg+/ZRIcSNAB6DXIweyFidAUAIcRzAy0S0Odi0C3L95cz2NaTL5koiWhD8X1d1znRfa7j6dh+A3w2ib64EMK65eKIRQmTiH4B3AXgWwGEAf9Jue1Ks5zWQj3NPAfi/4N+7IH3W+wH8AsC/AVjcbltTqv/bATwYfL4QwA8BHALwLQCFdtuXQn0vA3Ag6O9/BjCS9b4G8FkAPwPwNICvAyhksa8BfANyHmIW8untJlffAiDIyMLDAH4CGZXkfS5OgcAwDJNxsuK6YRiGYRyw0DMMw2QcFnqGYZiMw0LPMAyTcVjoGYZhMg4LPcMwTMZhoWcYhsk4/w8V+CKia9LkUwAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "rq2MjdxvMIDC",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 282
        },
        "outputId": "2e997ede-04ea-4dd3-9c8e-650ee54be3f3"
      },
      "source": [
        "plt.plot(history.epoch,history.history.get('loss'),label='loss')\n",
        "plt.plot(history.epoch,history.history.get('val_loss'),label='val_loss')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f6dc8aca5c0>]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 39
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LwanBK1dG1p_",
        "colab_type": "text"
      },
      "source": [
        "#sklearn的多层感知器"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "H0M1GrCQHRjr",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.neural_network import MLPClassifier\n",
        "from sklearn import metrics"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "T9e19OEOG8Dd",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "5aa9c86a-e087-4d7d-fbf3-4dd98f73e798"
      },
      "source": [
        "clf = MLPClassifier(hidden_layer_sizes=(100,100, ),max_iter=10000)\n",
        "clf.fit(X_trains,y_train)\n",
        "y_pred=clf.predict(X_tests)\n",
        "accuracy = metrics.accuracy_score(y_test, y_pred)\n",
        "print(f'准确率{accuracy}')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "准确率0.8469945355191257\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MdgMZ1K9Plfb",
        "colab_type": "text"
      },
      "source": [
        "#HMM隐式马尔科夫模型"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5F-AOApiPop_",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 193
        },
        "outputId": "a210aa24-b478-4904-86fb-bd7a27798721"
      },
      "source": [
        "!pip install hmmlearn"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting hmmlearn\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/ff/7b/33f629a443a0671161c019e55c3f1b511c7e9fdce5ab8c8c3c33470eb939/hmmlearn-0.2.3-cp36-cp36m-manylinux1_x86_64.whl (363kB)\n",
            "\r\u001b[K     |█                               | 10kB 20.5MB/s eta 0:00:01\r\u001b[K     |█▉                              | 20kB 2.2MB/s eta 0:00:01\r\u001b[K     |██▊                             | 30kB 2.8MB/s eta 0:00:01\r\u001b[K     |███▋                            | 40kB 3.1MB/s eta 0:00:01\r\u001b[K     |████▌                           | 51kB 2.5MB/s eta 0:00:01\r\u001b[K     |█████▍                          | 61kB 2.8MB/s eta 0:00:01\r\u001b[K     |██████▎                         | 71kB 3.1MB/s eta 0:00:01\r\u001b[K     |███████▏                        | 81kB 3.4MB/s eta 0:00:01\r\u001b[K     |████████                        | 92kB 3.6MB/s eta 0:00:01\r\u001b[K     |█████████                       | 102kB 3.5MB/s eta 0:00:01\r\u001b[K     |██████████                      | 112kB 3.5MB/s eta 0:00:01\r\u001b[K     |██████████▉                     | 122kB 3.5MB/s eta 0:00:01\r\u001b[K     |███████████▊                    | 133kB 3.5MB/s eta 0:00:01\r\u001b[K     |████████████▋                   | 143kB 3.5MB/s eta 0:00:01\r\u001b[K     |█████████████▌                  | 153kB 3.5MB/s eta 0:00:01\r\u001b[K     |██████████████▍                 | 163kB 3.5MB/s eta 0:00:01\r\u001b[K     |███████████████▎                | 174kB 3.5MB/s eta 0:00:01\r\u001b[K     |████████████████▏               | 184kB 3.5MB/s eta 0:00:01\r\u001b[K     |█████████████████               | 194kB 3.5MB/s eta 0:00:01\r\u001b[K     |██████████████████              | 204kB 3.5MB/s eta 0:00:01\r\u001b[K     |███████████████████             | 215kB 3.5MB/s eta 0:00:01\r\u001b[K     |███████████████████▉            | 225kB 3.5MB/s eta 0:00:01\r\u001b[K     |████████████████████▊           | 235kB 3.5MB/s eta 0:00:01\r\u001b[K     |█████████████████████▋          | 245kB 3.5MB/s eta 0:00:01\r\u001b[K     |██████████████████████▌         | 256kB 3.5MB/s eta 0:00:01\r\u001b[K     |███████████████████████▍        | 266kB 3.5MB/s eta 0:00:01\r\u001b[K     |████████████████████████▎       | 276kB 3.5MB/s eta 0:00:01\r\u001b[K     |█████████████████████████▏      | 286kB 3.5MB/s eta 0:00:01\r\u001b[K     |██████████████████████████      | 296kB 3.5MB/s eta 0:00:01\r\u001b[K     |███████████████████████████     | 307kB 3.5MB/s eta 0:00:01\r\u001b[K     |████████████████████████████    | 317kB 3.5MB/s eta 0:00:01\r\u001b[K     |████████████████████████████▉   | 327kB 3.5MB/s eta 0:00:01\r\u001b[K     |█████████████████████████████▊  | 337kB 3.5MB/s eta 0:00:01\r\u001b[K     |██████████████████████████████▋ | 348kB 3.5MB/s eta 0:00:01\r\u001b[K     |███████████████████████████████▌| 358kB 3.5MB/s eta 0:00:01\r\u001b[K     |████████████████████████████████| 368kB 3.5MB/s \n",
            "\u001b[?25hRequirement already satisfied: numpy>=1.10 in /usr/local/lib/python3.6/dist-packages (from hmmlearn) (1.18.5)\n",
            "Requirement already satisfied: scikit-learn>=0.16 in /usr/local/lib/python3.6/dist-packages (from hmmlearn) (0.22.2.post1)\n",
            "Requirement already satisfied: scipy>=0.15 in /usr/local/lib/python3.6/dist-packages (from hmmlearn) (1.4.1)\n",
            "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn>=0.16->hmmlearn) (0.16.0)\n",
            "Installing collected packages: hmmlearn\n",
            "Successfully installed hmmlearn-0.2.3\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "SK3NJ0kiPm03",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from hmmlearn import hmm"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3Wh8k7FgPzCT",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "model = hmm.MultinomialHMM(n_components=len(X_trains))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Yc_6m01wQVAg",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}
